我正在用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文件打开我试图在这里打印的内容时,它会显示(右下角)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
;CCD_ 6只知道如何读取CCD_
但你想要文本;在Java中,文本表示char
s的序列。
让我们暂时忘记你想要char
,而专注于你想要文本的事实;让我们用char
来代替信鸽。
现在,您需要做的是将这个字节流转换为信鸽流。为此,您需要一个特定的过程。在这种情况下,这个过程被称为解码。
现在回到Java。也存在一个相反的过程:将信鸽流(或char
s)编码为字节流。
诀窍。。。有几种方法可以做到这一点;Unicode将它们称为character codings
;在Java中,同时提供编码器和解码器的基类是Charset
。
现在,InputStreamReader
接受Charset
作为第二个参数。。。您应该始终指定。如果你不这样做,这个:
new InputStreamReader(in);
将相当于:
new InputStreamReader(in, Charset.defaultCharset());
而CCD_ 16不是。保证。成为。相同的在实施。属于JRE。