HTTPUrlConnection

时间:2018-08-09 13:54:32

标签: java linux character-encoding

我正在使用Java的InputStream的{​​{1}}来获取URL正文并将其写入文件。 在我的笔记本电脑(Ubuntu / Centos桌面版)上,一切正常,但在服务器(centos 6.5服务器版)上,特殊字符,输入的内容乱码成问号。 我试图比较Java的HttpUrlConnectionCharset.defaultCharset(),它们在笔记本电脑和服务器上都是相同的。

任何人都可以帮助我找出笔记本电脑和服务器操作系统中与字符编码问题相关的不同之处。

System.getProperty("file.encoding")

1 个答案:

答案 0 :(得分:0)

通常在标头中给出编码(例如,connection.getContentEncoding()可以为null)。这对于文本,将InputStream转换为Reader(InputStreamReader)等很有用。

如果使用InputStream / OutputStream,则按原样使用二进制数据,因此不会发生损坏。但是,您将丢失标头信息,这可能已经说明了一些编码问题。为了保持一致性,您可能希望将任何具有给定编码的数据存储为UTF-8。但是,在HTML中,可以在内容中给出编码。


在给定的代码上

默认情况下,输入已编码。对于平台,甚至用户设置,这都是非常可变的。 最好使用显式编码。

// Nice if the connection has in its headers an encoding
// or in Content-Type charset=...
String encoding = con.getContentEncoding();
if (encoding == null) {
    // Otherwise ISO-8859-1 is the HTTP standard, and
    // browsers extend ISO-8859-1 to Windows-1252.
    encoding = "Windows-1252";
}
Charset charset = Charset.forName(encoding);
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));

当然,将StringBuilder的字符串写入具有正确编码的媒体上。