骆驼:码头响应编码
Camel: Jetty response encoding
我想在 Camel 环境中使用 Jetty 组件。这是我的 spring-config.xml:
的摘录
...
<bean id="webEnc" class="web.WebEnc" />
<camelContext>
<route>
<from uri="jetty:http://0.0.0.0/enc" />
<process ref="webEnc" />
</route>
</camelContext>
...
这是用于 return a String
:
的代码
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
public class WebEnc implements Processor{
@Override
public void process(Exchange exchange) throws Exception {
exchange.getOut().setBody("abcäöüß\"€一二三"); //the last three symbols are chinese for '123'
}
}
关于编码或字符集或类似的东西,本地地址有效(http://127.0.0.1/enc) but the browser does not display the string correctly (displayed as 'abcäöüß"€一二三'). I assume the problem is some encoding. How to set the encoding like 'utf-8'?
I can't find any hint here (http://camel.apache.org/jetty.html)。
我认为您必须在输出消息中使用 utf-8 字符集设置 Content-Type header,如下所示:
@Override
public void process(Exchange exchange) throws Exception {
exchange.getOut().setBody("abcäöüß\"€一二三"); //the last three symbols are chinese for '123'
exchange.getOut().setHeader(Exchange.CONTENT_TYPE, "text/html; charset=utf-8");
}
经过 Łukasz 的一些帮助和提示(感谢您的宝贵时间),我找到了一个很好的解决方案。这会强制 Jetty 传送字节,而不是字符串:
exchange.getOut().setBody("abcäöüß\"€一二三".getBytes("utf-32"));
为了帮助浏览器显示正确的符号,我这样做了:
exchange.getOut().setHeader(Exchange.CONTENT_TYPE, "text/html; charset=utf-32");
我的firefox不能用utf-32显示中文符号,用utf-8没问题。 Chrome 两种编码都这样做。
但实际上我对此不感兴趣,我的目的是传递字节。 getBytes()
完成任务。
我想在 Camel 环境中使用 Jetty 组件。这是我的 spring-config.xml:
的摘录...
<bean id="webEnc" class="web.WebEnc" />
<camelContext>
<route>
<from uri="jetty:http://0.0.0.0/enc" />
<process ref="webEnc" />
</route>
</camelContext>
...
这是用于 return a String
:
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
public class WebEnc implements Processor{
@Override
public void process(Exchange exchange) throws Exception {
exchange.getOut().setBody("abcäöüß\"€一二三"); //the last three symbols are chinese for '123'
}
}
关于编码或字符集或类似的东西,本地地址有效(http://127.0.0.1/enc) but the browser does not display the string correctly (displayed as 'abcäöüß"€一二三'). I assume the problem is some encoding. How to set the encoding like 'utf-8'?
I can't find any hint here (http://camel.apache.org/jetty.html)。
我认为您必须在输出消息中使用 utf-8 字符集设置 Content-Type header,如下所示:
@Override
public void process(Exchange exchange) throws Exception {
exchange.getOut().setBody("abcäöüß\"€一二三"); //the last three symbols are chinese for '123'
exchange.getOut().setHeader(Exchange.CONTENT_TYPE, "text/html; charset=utf-8");
}
经过 Łukasz 的一些帮助和提示(感谢您的宝贵时间),我找到了一个很好的解决方案。这会强制 Jetty 传送字节,而不是字符串:
exchange.getOut().setBody("abcäöüß\"€一二三".getBytes("utf-32"));
为了帮助浏览器显示正确的符号,我这样做了:
exchange.getOut().setHeader(Exchange.CONTENT_TYPE, "text/html; charset=utf-32");
我的firefox不能用utf-32显示中文符号,用utf-8没问题。 Chrome 两种编码都这样做。
但实际上我对此不感兴趣,我的目的是传递字节。 getBytes()
完成任务。