将InputStream读取为UTF-8

问题描述 投票:89回答:3

我试图通过互联网逐行读取text/plain文件。我现在的代码是:

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ó!,我正在使用它来测试编码。

当我回顾OutputStreamout)时,我将其视为> ¬°H√©ll√≥!。我不相信这是OutputStream的问题,因为我可以毫无问题地做out.println("é");

任何阅读的想法形成InputStream为UTF-8?谢谢!

java utf-8 inputstream
3个回答
170
投票

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

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

需要是:

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

或者从Java 7开始:

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

14
投票
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) {

}

试试这个,.. :-)


4
投票

每次发现一个特殊字符标记为��时,我遇到了同样的问题。为了解决这个问题,我尝试使用编码:ISO-8859-1

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

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

}

我希望这可以帮助任何看过这篇文章的人。

© www.soinside.com 2019 - 2024. All rights reserved.