Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在HTTP头中发送UTF-8值会导致Mojibake_Java_Http_Servlets_Utf 8_Header - Fatal编程技术网

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");