Java HTTP组件编码问题

Java HTTP组件编码问题,java,character-encoding,apache-httpcomponents,Java,Character Encoding,Apache Httpcomponents,当使用HTTP组件(java library for HTTP)时,我得到的响应显示为',-显示为ȗ,好,因此基本上你从一个你无法控制的服务器得到的响应没有内容类型,而且你有编码问题 在java中,每个字符串在内部都作为Unicode字符串进行处理,尽管它们的格式不同 所以我猜你的问题是,你在哪里显示这些字符,要么显示在控制台上,要么显示在文件上 控制台将使用默认字符集在那里打印字符。例如,在我的机器中是MacRoman,而不是utf-8 因此,您需要从响应中获取原始字节,并执行如下操作: Sy

当使用HTTP组件(java library for HTTP)时,我得到的响应显示为
'
-
显示为
ȗ
,好,因此基本上你从一个你无法控制的服务器得到的响应没有
内容类型
,而且你有编码问题

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中找不到字符集,则使用作为参数传递的字符集_