10

我想从 servletHTTPServletResponse向客户端发送阿拉伯语数据

我正在尝试这个

response.setCharacterEncoding("UTF-8");
response.setHeader("Info", arabicWord);

我收到这样的词

String arabicWord = response.getHeader("Info");

在客户端(接收)也试过这个

byte[]d = response.getHeader("Info").getBytes("UTF-8");
arabicWord = new String(d);

但似乎没有 unicode,因为我收到奇怪的英文单词,所以请问我如何发送和接收阿拉伯 utf8 单词?

4

2 回答 2

36

HTTP 标头不支持 UTF-8。它们仅正式支持 ISO-8859-1。另请参阅RFC 2616 第 2 节

仅当根据 RFC 2047 [14] 的规则编码时,*TEXT 的字可能包含来自 ISO-8859-1 [22] 以外的字符集的字符。

最好的办法是对它们进行 URL 编码和解码。

response.setHeader("Info", URLEncoder.encode(arabicWord, "UTF-8"));

String arabicWord = URLDecoder.decode(response.getHeader("Info"), "UTF-8");

URL 编码会将它们转换为完全有效的 ISO-8859-1%nn格式。请注意,在标头中发送的数据可能有大小限制。而是在响应正文中以纯文本、JSON、CSV 或 XML 格式发送它。以这种方式使用自定义 HTTP 标头是一种设计气味。

于 2012-06-26T18:00:11.720 回答
2

我不知道word变量来自哪里,但试试这个:

arabicWord = new String(d, "UTF-8");

更新:看起来问题出在 HTTP标头中的 UTF-8 编码数据上,有关详细讨论,请参阅:Java 中的 HTTP 标头编码/解码。

于 2012-06-26T17:56:20.553 回答