繁体   English   中英

再次是String转换:UNIX Windows-1252到String

[英]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文件打开要在此处进行打印的内容时,它显示(在右下角) 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阅读; 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM