又是字符串转换:UNIX Windows-1252到字符串



我正在用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");

但它所做的只是用?替换这些特殊字符。

当我使用Notepad++从Chrome下载的.html文件打开我试图在这里打印的内容时,它会显示(右下角)UNIXWindows-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;CCD_ 6只知道如何读取CCD_

但你想要文本;在Java中,文本表示char s的序列。

让我们暂时忘记你想要char,而专注于你想要文本的事实;让我们用char来代替信鸽。

现在,您需要做的是将这个字节流转换为信鸽流。为此,您需要一个特定的过程。在这种情况下,这个过程被称为解码

现在回到Java。也存在一个相反的过程:信鸽流(或chars)编码为字节流。

诀窍。。。有几种方法可以做到这一点;Unicode将它们称为character codings;在Java中,同时提供编码器解码器的基类是Charset

现在,InputStreamReader接受Charset作为第二个参数。。。您应该始终指定。如果你不这样做,这个:

new InputStreamReader(in);

将相当于:

new InputStreamReader(in, Charset.defaultCharset());

而CCD_ 16不是。保证。成为。相同的在实施。属于JRE。

最新更新