簡體   English   中英

將 InputStream 讀取為 UTF-8

[英]Reading InputStream as UTF-8

我正在嘗試通過 inte.net 逐行讀取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 有什么想法嗎? 謝謝!

解決了我自己的問題。 這一行:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM