Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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
HTTPUrlConnection的inputStream的java默认字符编码_Java_Linux_Character Encoding - Fatal编程技术网

HTTPUrlConnection的inputStream的java默认字符编码

HTTPUrlConnection的inputStream的java默认字符编码,java,linux,character-encoding,Java,Linux,Character Encoding,我正在使用java的HttpUrlConnection的InputStream获取URL主体并将其写入文件。 在我的笔记本电脑(Ubuntu/Centos桌面版)上一切正常,但在服务器(Centos 6.5服务器版)上,特殊字符、输入的字符会被打乱,变成问号。 我试图比较Java的Charset.defaultCharset()和System.getProperty(“file.encoding”),它们在笔记本电脑和服务器上都是相同的 有人能帮我找出笔记本电脑和服务器操作系统中与字符编码问题相

我正在使用java的
HttpUrlConnection
InputStream
获取URL主体并将其写入文件。 在我的笔记本电脑(Ubuntu/Centos桌面版)上一切正常,但在服务器(Centos 6.5服务器版)上,特殊字符、输入的字符会被打乱,变成问号。 我试图比较Java的
Charset.defaultCharset()
System.getProperty(“file.encoding”)
,它们在笔记本电脑和服务器上都是相同的

有人能帮我找出笔记本电脑和服务器操作系统中与字符编码问题相关的不同之处吗

StringBuilder response = new StringBuilder();
URL obj = new URL("http://www.Some URL That Has spl Char (eg. EN Dash)");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}

在头文件中通常会给出编码(例如,connection.getContentEncoding()可以为null)。这对于文本、将InputStream转换为读取器(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的字符串写入具有正确编码的媒体。

在使用InputStream的位置显示代码,谢谢Joop,但这在桌面版操作系统上运行良好,我只在服务器版上面临问题OS@RohitVerma将字符集的规范添加到
InputStreamReader
。否则,该代码不适用于非本地数据的跨平台使用。
OutputStreamWriter
的保持不变。问题是,这些字节的编码是什么?这是已知的,如果指定了字符集,它可以正常工作。我的问题是,若并没有明确提到字符集,那个么找出在服务器上造成此问题的属性或差异。
// 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));