小编典典

在HTTP标头中发送UTF-8值会导致Mojibake

java

我想从servlet使用阿拉伯数据发送HTTPServletResponse到客户端

我正在尝试这个

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单词?


阅读 225

收藏
2020-11-13

共1个答案

小编典典

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标头即是设计气味。

2020-11-13