Java HTTP组件编码问题
当使用HTTP组件(java library for HTTP)时,我得到的响应显示为Java HTTP组件编码问题,java,character-encoding,apache-httpcomponents,Java,Character Encoding,Apache Httpcomponents,当使用HTTP组件(java library for HTTP)时,我得到的响应显示为',-显示为ȗ,好,因此基本上你从一个你无法控制的服务器得到的响应没有内容类型,而且你有编码问题 在java中,每个字符串在内部都作为Unicode字符串进行处理,尽管它们的格式不同 所以我猜你的问题是,你在哪里显示这些字符,要么显示在控制台上,要么显示在文件上 控制台将使用默认字符集在那里打印字符。例如,在我的机器中是MacRoman,而不是utf-8 因此,您需要从响应中获取原始字节,并执行如下操作: Sy
'
,-
显示为ȗ
,好,因此基本上你从一个你无法控制的服务器得到的响应没有内容类型
,而且你有编码问题
在java
中,每个字符串在内部都作为Unicode字符串进行处理,尽管它们的格式不同
所以我猜你的问题是,你在哪里显示这些字符,要么显示在控制台上,要么显示在文件上
控制台将使用默认字符集在那里打印字符。例如,在我的机器中是MacRoman
,而不是utf-8
因此,您需要从响应中获取原始字节,并执行如下操作:
System.out.println(new String(raw_byte_array, "utf-8"));
此外,这可能会为这件事提供一些线索:
好的,所以基本上你从一个你无法控制的服务器上得到了一个没有
内容类型的响应,并且你有编码问题
在java
中,每个字符串在内部都作为Unicode字符串进行处理,尽管它们的格式不同
所以我猜你的问题是,你在哪里显示这些字符,要么显示在控制台上,要么显示在文件上
控制台将使用默认字符集在那里打印字符。例如,在我的机器中是MacRoman
,而不是utf-8
因此,您需要从响应中获取原始字节,并执行如下操作:
System.out.println(new String(raw_byte_array, "utf-8"));
此外,这可能会为这件事提供一些线索:
在最新的4.x版本中,您可以使用下面类似的内容来表示对Charset的不可知-
HttpEntity entity = response.getEntity();
Charset charset = ContentType.getOrDefault(entity).getCharset();
在最新版本4.x中,您可以使用下面这样的内容来表示对Charset的不可知-
HttpEntity entity = response.getEntity();
Charset charset = ContentType.getOrDefault(entity).getCharset();
是否可以检查内容编码
响应标题并将值粘贴到此处?内容编码为空。当我提出请求时,我应该设置它吗?哦,你同时控制服务器和客户端吗?只是客户端。但是我有完全相同的C#代码,我没有这个问题。让我们把它作为一个答案来处理,因为在这个小盒子里写东西让我感到不安。如果我不能帮助您,我可以随时删除该问题。您可以检查内容编码
响应标题并将值粘贴到此处吗?内容编码为空。当我提出请求时,我应该设置它吗?哦,你同时控制服务器和客户端吗?只是客户端。但是我有完全相同的C#代码,我没有这个问题。让我们把它作为一个答案来处理,因为在这个小盒子里写东西让我感到不安。如果我不帮你,我可以随时删除这个问题。我只是把它显示在控制台上。内容编码
是数据压缩。你的意思是charset
@dan04,真的@您可以检查字符集
属性的内容类型
属性吗?我知道字符集是UTF-8,但我在将值转换为字符串时指定了它<代码>EntityUtils.toString(响应“utf-8”)代码>您是否绝对确定内容是UTF-8?请注意,在EntityUtils上的javadocs中,如果在HttpEntity\u中找不到字符集,则使用作为参数传递的字符集。我只是将其显示到控制台。内容编码
是数据压缩。你的意思是charset
@dan04,真的@您可以检查字符集
属性的内容类型
属性吗?我知道字符集是UTF-8,但我在将值转换为字符串时指定了它<代码>EntityUtils.toString(响应“utf-8”)代码>您是否绝对确定内容是UTF-8?注意,从EntityUtils上的javadocs中,如果在HttpEntity中找不到字符集,则使用作为参数传递的字符集_