You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/02/16 07:03:50 UTC
[camel] branch master updated: camel-core - Optimize IOHelper to
extract charset from content-type header.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new 50c9b25 camel-core - Optimize IOHelper to extract charset from content-type header.
50c9b25 is described below
commit 50c9b25cd258366ce0dea46aa9bfea1aaa320f08
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Feb 16 07:55:42 2021 +0100
camel-core - Optimize IOHelper to extract charset from content-type header.
---
.../main/java/org/apache/camel/util/IOHelper.java | 32 +++++++++++++++-------
1 file changed, 22 insertions(+), 10 deletions(-)
diff --git a/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java b/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
index 85023ef..4c13957 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
@@ -462,27 +462,36 @@ public final class IOHelper {
/**
* Get the charset name from the content type string
*
- * @param contentType
+ * @param contentType the content type
* @return the charset name, or <tt>UTF-8</tt> if no found
*/
public static String getCharsetNameFromContentType(String contentType) {
- String[] values = contentType.split(";");
- String charset = "";
+ // try optimized for direct match without using splitting
+ int pos = contentType.indexOf("charset=");
+ if (pos != -1) {
+ int end = contentType.indexOf(';', pos);
+ String charset;
+ if (end > pos) {
+ charset = contentType.substring(pos + 8, end);
+ } else {
+ charset = contentType.substring(pos + 8);
+ }
+ return normalizeCharset(charset);
+ }
+ String[] values = contentType.split(";");
for (String value : values) {
value = value.trim();
// Perform a case insensitive "startsWith" check that works for different locales
String prefix = "charset=";
if (value.regionMatches(true, 0, prefix, 0, prefix.length())) {
// Take the charset name
- charset = value.substring(8);
+ String charset = value.substring(8);
+ return normalizeCharset(charset);
}
}
- if ("".equals(charset)) {
- charset = "UTF-8";
- }
- return normalizeCharset(charset);
-
+ // use UTF-8 as default
+ return "UTF-8";
}
/**
@@ -490,14 +499,17 @@ public final class IOHelper {
*/
public static String normalizeCharset(String charset) {
if (charset != null) {
+ boolean trim = false;
String answer = charset.trim();
if (answer.startsWith("'") || answer.startsWith("\"")) {
answer = answer.substring(1);
+ trim = true;
}
if (answer.endsWith("'") || answer.endsWith("\"")) {
answer = answer.substring(0, answer.length() - 1);
+ trim = true;
}
- return answer.trim();
+ return trim ? answer.trim() : answer;
} else {
return null;
}