Java 在HTTP头中发送UTF-8值会导致Mojibake
我想使用Java 在HTTP头中发送UTF-8值会导致Mojibake,java,http,servlets,utf-8,header,Java,Http,Servlets,Utf 8,Header,我想使用HTTPServletResponse从servlet向客户端发送阿拉伯语数据 我正在尝试这个 response.setCharacterEncoding("UTF-8"); response.setHeader("Info", arabicWord); 我收到了这样一个词 String arabicWord = response.getHeader("Info"); 在客户端(接收)中也尝试了这种方法 byte[]d = response.getHeader("Info").get
HTTPServletResponse
从servlet向客户端发送阿拉伯语数据
我正在尝试这个
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单词?我不知道
单词
变量来自何处,但请尝试以下方法:
arabicWord = new String(d, "UTF-8");
更新:问题似乎出在HTTP标头中的UTF-8编码数据上,有关详细讨论,请参阅。HTTP标头不支持UTF-8。他们仅正式支持ISO-8859-1。另见: 只有在根据RFC 2047[14]的规则进行编码时,*文本的字才能包含ISO-8859-1[22]以外的字符集中的字符 你最好的选择是URL编码和解码它们
response.setHeader("Info", URLEncoder.encode(arabicWord, "UTF-8"));
及
URL编码将它们转换为完全有效的ISO-8859-1。请注意,标头中发送的数据可能有大小限制。而是在响应体中以纯文本、JSON、CSV或XML格式发送。以这种方式使用自定义HTTP头就是一种设计风格。我需要通过常规HTTP头和url编码将一个UTF-8字符串从PHP传递到Javascript,谢谢!
String arabicWord = URLDecoder.decode(response.getHeader("Info"), "UTF-8");