Apache camel 驼峰中URL参数中的非ascii字符

Apache camel 驼峰中URL参数中的非ascii字符,apache-camel,Apache Camel,我正在使用Facebook的GraphAPI,我通过camel框架调用它。我的查询具有非ASCII字符(例如küçük)。我得到以下例外情况:- Cause: org.apache.commons.httpclient.URIException: Invalid query at org.apache.commons.httpclient.URI.parseUriReference(URI.java:2049) at org.apache.commons.httpclient.URI.<

我正在使用Facebook的GraphAPI,我通过camel框架调用它。我的查询具有非ASCII字符(例如küçük)。我得到以下例外情况:-

Cause: 
org.apache.commons.httpclient.URIException: Invalid query
at org.apache.commons.httpclient.URI.parseUriReference(URI.java:2049)
at org.apache.commons.httpclient.URI.<init>(URI.java:147)
at org.apache.commons.httpclient.HttpMethodBase.getURI
at org.apache.commons.httpclient.HttpClient.executeMethod
at org.apache.commons.httpclient.HttpClient.executeMethod
at org.apache.camel.component.http.HttpProducer.executeMethod
at org.apache.camel.component.http.HttpProducer.process
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:122)
“URL编码将非ASCII字符替换为“%”后跟十六进制数字。”()

你可以试试这个:

URL url = new URL(uri.toASCIIString()); 
或许

String xstr = URLEncoder.encode("维", "utf-8");

使用
encodeURIComponent(url)
它将起作用

,因此这就是我们能够解决问题的方法

在ApacheCamel中,HTTP_URI组件不接受任何特殊字符,即使在编码之后也是如此。这是Camel中的一个bug,尚未关闭

幸运的是,这些特殊字符只会出现在URL的查询字符串中,而不是主URI部分。Camel提供了另一个组件HTTP_查询,它可以成功解析和理解编码的UTF-8字符。通过在标题中设置它,我们能够解决这个问题

因此,基本上我们首先将URL编码为UTF-8,然后将HTTP_查询值设置为查询字符串。这很有魅力。 e、 g.(斯卡拉)


阅读关于url编码的内容-这不是一个特定于骆驼的问题,而是url的一般规则。@ClausIbsen I提到了ApacheCamel文档()。在“URL、URI、URN和IRI的含义”一节中,该文档称驼峰URI可以支持美国ASCII字符集中的字母和数字。您知道我可以让camel使用IRI或任何其他选项来支持特殊字符的方法吗?我也有同样的问题,非常感谢您的帮助。谢谢您的回复,但这在Apache camel上下文中没有帮助。camel在URL的主要部分支持特殊字符。当URL的查询部分中有特殊字符时,会出现无效URI问题。
String xstr = URLEncoder.encode("维", "utf-8");
.setHeader(Exchange.HTTP_QUERY, _.in[HttpRequest].uri.split(?).head)
.setHeader(Exchange.HTTP_URI, _.in[HttpRequest].uri)