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

2024-05-20

我想使用 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 单词?


HTTP 标头不支持 UTF-8。他们仅正式支持 ISO-8859-1。也可以看看RFC 2616 http://www.w3.org/Protocols/rfc2616/rfc2616.html 第2节 http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html:

仅当根据 RFC 2047 [14] 的规则进行编码时, *TEXT 的单词才可以包含 ISO-8859-1 [22] 以外的字符集中的字符。

最好的选择是对它们进行 URL 编码和解码。

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

and

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 HTTP 标头中发送 UTF-8 值会导致 Mojibake 的相关文章

随机推荐