gpt4 book ai didi

java - 又是字符串转换: UNIX Windows-1252 to String

转载 作者:行者123 更新时间:2023-12-02 04:49:33 27 4
gpt4 key购买 nike

我正在使用 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 文件打开要在此处打印的内容时,它显示(在右下角)UNIXWindows-1252.这就是我对编码文件的全部了解。

我还可以采取哪些步骤来找出问题所在?

--并且--

如何转换此文件,以便我可以在 Java 中正确读取和打印它?

抱歉,如果这个问题有点愚蠢......我只是不知道更好,并且在互联网上找不到任何东西。

最佳答案

好吧,所以你在这里混合了很多东西。

首先,你要做的是:

new InputStreamReader(myUrl.openStream())

这将打开一个阅读器,是的;但是,它将使用您的默认 JRE/OS 字符集来执行此操作。也许不是你想要的。

尝试指定您需要 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 只知道如何读取字节

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

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

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

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

技巧...有多种方法可以做到这一点; Unicode 将它们称为字符编码;在 Java 中,提供编码器解码器的基类是Charset

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

new InputStreamReader(in);

相当于:

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

Charset.defaultCharset() 不是。有保证。到。是。这。相同的。其中。实现。的。 JRE。

关于java - 又是字符串转换: UNIX Windows-1252 to String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29355461/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com