Java 将InputStream读取为UTF-8

Java 将InputStream读取为UTF-8,java,utf-8,inputstream,Java,Utf 8,Inputstream,我正试图通过互联网逐行读取文本/普通文件。我现在掌握的代码是: 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 ((readLi

我正试图通过互联网逐行读取
文本/普通
文件。我现在掌握的代码是:

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);
}
URL=新URL(“http://kuehldesign.net/test.txt");
BufferedReader in=新的BufferedReader(新的InputStreamReader(url.openStream());
LinkedList lines=新建LinkedList();
字符串读取线;
而((readLine=in.readLine())!=null){
行。添加(readLine);
}
用于(字符串行:行){
out.println(“>”+行);
}
文件
test.txt
,包含
“Hélló!”,我正在使用它来测试编码

当我查看
OutputStream
out
)时,我将其视为
>,°H√©ll√≥!。我不认为这是
OutputStream
的问题,因为我可以做
out.println(“é”)没有问题


InputStream
读取UTF-8有什么想法吗?谢谢

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

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));

试试这个,…:-)

每次它发现一个特殊字符将其标记为��. 为了解决这个问题,我尝试使用编码:ISO-8859-1

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

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

}

我希望这能帮助任何看到这篇文章的人。

我很确定构造函数的形式不会在无效输入时引发异常。您需要将与
CharsetDecoder dec
参数一起使用。这与
OutputStreamWriter
构造函数的Java设计缺陷是一样的:四个构造函数中只有一个会在出现问题时屈尊告诉您。您还必须在这里使用花哨的
CharsetDecoder-dec
参数。唯一安全和明智的做法是考虑所有其他被否决的构造函数,因为它们不能被信任来执行。因为java 7可以将字符集提供为常数,而不是字符串<代码>标准字符集。UTFF88/COD> HTTP协议指定编码。为什么不使用一个库API来处理这些问题?您不应该像这样猜测编码。我并不想消极:你做得很好!我只是想知道是否有更简单的方法。不幸的是,我将无法访问提供
文本/普通文件的服务器,而且它没有使用UTF-8编码。我不知道有什么好的网络图书馆;有什么建议吗?看看,我认为你根本不需要指定编码。我很惊讶他们给了你一个字节流!您确实可以访问底层,从中可以检查内容编码,然后使用正确的参数打开InputStreamReader。对源代码的快速检查并没有发现任何适合您的东西,这看起来非常糟糕,而且容易出错,所以我可能遗漏了一些东西。与其使用file+=str,不如创建一个StringBuilder并附加到它。编译器可能能够优化字符串附加,但它可能会创建大量垃圾。如果要将BufferedReader转换为字符串,请使用Apache Commons,不要重新创建wheal:string myStr=org.Apache.Commons.io.IOUtils.toString(myBufferedReaderInstance);UTF8=“UTF8”,漂亮的变量;)您能告诉我UTF-8中不支持的字符是什么吗?
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("txtPath"),"ISO-8859-1"));

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

}