关于Java:以UTF-8格式读取InputStream

Reading InputStream as UTF-8

我正在尝试通过Internet从text/plain文件逐行读取文件。 我现在拥有的代码是:

1
2
3
4
5
6
7
8
9
10
11
12
URL url = new URL("http://kuehldesign.net/test.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
LinkedList<String> lines = new LinkedList();
String readLine;

while ((readLine = in.readLine()) != null) {
    lines.add(readLine);
}

for (String line : lines) {
    out.println(">" + line);
}

文件test.txt包含?Hélló!,我正在使用该文件来测试编码。

当我查看OutputStream(out)时,将其视为> ?°H√?ll√≥!。 我不相信OutputStream存在问题,因为我可以毫无问题地执行out.println("é");

有什么想法可以将InputStream读为UTF-8吗? 谢谢!


解决了我自己的问题。 这行:

1
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));

需要是:

1
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8"));

或从Java 7开始:

1
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8));


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String file ="";

try {

    InputStream is = new FileInputStream(filename);
    String UTF8 ="utf8";
    int BUFFER_SIZE = 8192;

    BufferedReader br = new BufferedReader(new InputStreamReader(is,
            UTF8), BUFFER_SIZE);
    String str;
    while ((str = br.readLine()) != null) {
        file += str;
    }
} catch (Exception e) {

}

尝试这个,.. :-)


每当发现特殊字符将其标记为??时,我都会遇到相同的问题。 为了解决这个问题,我尝试使用以下编码:ISO-8859-1

1
2
3
4
5
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("txtPath"),"ISO-8859-1"));

while ((line = br.readLine()) != null) {

}

我希望这可以对任何看到此帖子的人有所帮助。