我正在尝试通过 Internet 逐行读取 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ó!
,我使用它来测试编码。
当我查看 OutputStream
(out
) 时,我将其视为 > ¬°H√©ll√≥!
。我不认为这是 OutputStream
的问题,因为我可以毫无问题地执行 out.println("é");
。
将 InputStream
格式读取为 UTF-8 的任何想法?谢谢!
text/plain
文件的服务器,而且它没有使用 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));
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
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("txtPath"),"ISO-8859-1"));
while ((line = br.readLine()) != null) {
}
我希望这可以帮助任何看到这篇文章的人。
如果您使用构造函数 InputStreamReader(InputStream in, Charset cs)
,坏字符会被静默替换。要更改此行为,请使用 CharsetDecoder
:
public static Reader newReader(Inputstream is) {
new InputStreamReader(is,
StandardCharsets.UTF_8.newDecoder()
.onMalformedInput(CodingErrorAction.REPORT)
.onUnmappableCharacter(CodingErrorAction.REPORT)
);
}
然后捕捉 java.nio.charset.CharacterCodingException
。
不定期副业成功案例分享
CharsetDecoder dec
参数的 。这与OutputStreamWriter
构造函数具有相同的 Java 设计错误:四个构造函数中只有一个实际上屈尊于告诉您何时出现问题。您还必须在那里使用花哨的CharsetDecoder dec
参数。唯一安全和理智的做法是考虑弃用所有其他构造函数,因为不能信任它们的行为。StandardCharsets.UTF_8