骆驼:码头响应编码

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() 完成任务。