我想從流中獲取編碼。Java:我怎樣才能從inputStream獲取編碼?
第一種方法 - 使用InputStreamReader。
但它總是返回操作系統編碼。
InputStreamReader reader = new InputStreamReader(new FileInputStream("aa.rar"));
System.out.println(reader.getEncoding());
輸出:GBK
第二方法 - 使用UniversalDetector會。
但它總是返回null。
FileInputStream input = new FileInputStream("aa.rar");
UniversalDetector detector = new UniversalDetector(null);
byte[] buf = new byte[4096];
int nread;
while ((nread = input.read(buf)) > 0 && !detector.isDone()) {
detector.handleData(buf, 0, nread);
}
// (3)
detector.dataEnd();
// (4)
String encoding = detector.getDetectedCharset();
if (encoding != null) {
System.out.println("Detected encoding = " + encoding);
} else {
System.out.println("No encoding detected.");
}
// (5)
detector.reset();
輸出:空
我怎樣才能得到正確的? :(
InputStreamReader將始終使用平臺編碼。它不會嘗試檢測文件中的編碼。 通過UniversalDetector運行什麼類型的文件?在你的例子中,你使用了一個RAR文件,它是一個壓縮的二進制格式。首先嚐試使用簡單的ASCII文本文件。 – prunge
嗨,我改變了文件類型,'Fortunes.txt'輸出:沒有檢測到編碼 –
似乎沒有檢測到'標準'UTF-8或UTF-16沒有BOM,但它的工作原理是UTF-16爲我提供BOM。也許考慮使用不同的庫進行字符集檢測? [此鏈接](http://stackoverflow.com/questions/499010/java-how-to-determine-the-correct-charset-encoding-of-a-stream)可能會有所幫助。 – prunge