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) {
}