[英]It's the String conversion again: UNIX Windows-1252 to String
我正在使用Java下载Java网站,方法如下:
myUrl = new URL("here is my URL");
in = new BufferedReader(new InputStreamReader(myUrl.openStream()));
但是,此文件中有一些特殊字符,如ä,ö和ü。 我需要能够正确打印这些。
我尝试使用以下方式编码字符串:
String encodedString = new String(toEncode.getBytes("Windows-1252"), "UTF-8");
但是它所做的就是用?
替换这些特殊字符?
。
当我尝试使用从Chrome和Notepad ++下载的.html文件打开要在此处进行打印的内容时,它显示(在右下角) UNIX
和Windows-1252
。 这就是我对编码文件的了解。
我可以采取什么其他步骤找出问题所在?
- 和 -
如何转换此文件,以便可以用Java正确读取和打印它?
抱歉,这个问题有点愚蠢……我根本不知道,并且在互联网上找不到任何东西。
好,所以您在这里混合了很多东西。
首先,您需要执行以下操作:
new InputStreamReader(myUrl.openStream())
这将打开读者,是的; 但是,它将使用默认的JRE / OS Charset
。 也许不是您想要的。
尝试指定您要使用UTF_8(注意,Java 7+代码):
try (
final InputStream in = myUrl.openStream();
final Reader reader = new InputStreamReader(in, StandardCharsets.UTF_8);
) {
// read from the reader here
}
现在,您正在混合...
您从InputStream
阅读; InputStream
仅知道如何读取byte
s。
但是你想要文字; 在Java中,文本表示char
序列。
让我们暂时忘记您想要的char
并专注于您想要文本的事实; 让我们用char
代替信鸽。
现在,您需要做的是将字节流转换为载体鸽子流。 为此,您需要一个特定的过程。 在这种情况下,该过程称为解码 。
现在回到Java。 也存在一个相反的过程: 将信鸽(或char
)流编码为字节流。
诀窍...有几种方法可以做到这一点。 Unicode将它们称为character codings
。 在Java中,提供编码器和解码器的基类是Charset
。
现在, InputStreamReader
接受一个Charset
作为第二个参数……您应该始终指定它。 如果您不这样做,则:
new InputStreamReader(in);
将等同于:
new InputStreamReader(in, Charset.defaultCharset());
而Charset.defaultCharset()
为Not。 保证。 至。 是。 的。 相同。 其中。 实现。 的。 JRE。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.