Tôi muốn nhận mã hóa từ luồng.Java: Làm thế nào tôi có thể nhận được mã hóa từ inputStream?
Phương pháp thứ nhất - để sử dụng InputStreamReader.
Nhưng nó luôn trả về mã hóa hệ điều hành.
InputStreamReader reader = new InputStreamReader(new FileInputStream("aa.rar"));
System.out.println(reader.getEncoding());
đầu ra: GBK
phương pháp thứ 2 - sử dụng UniversalDetector.
Nhưng nó luôn trả về giá trị rỗng.
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();
đầu ra: null
Làm thế nào tôi có thể nhận bên phải? :(
InputStreamReader sẽ luôn sử dụng mã hóa nền tảng. Nó không cố gắng để phát hiện mã hóa trong các tập tin. Loại tệp nào bạn đang chạy thông qua UniversalDetector? Trong ví dụ của bạn, bạn đã sử dụng một tệp RAR, là một định dạng nhị phân nén. Hãy thử với một tập tin văn bản ASCII đơn giản đầu tiên. – prunge
hi, tôi đã thay đổi loại tệp, đầu ra 'Fortunes.txt': Không phát hiện mã hóa –
Nó dường như không phát hiện 'chuẩn' UTF-8 hoặc UTF-16 mà không có BOM, nhưng nó hoạt động cho UTF-16 với một BOM cho tôi. Có thể xem xét sử dụng một thư viện khác để phát hiện ký tự? [Liên kết này] (http://stackoverflow.com/questions/499010/java-how-to-determine-the-correct-charset-encoding-of-a-stream) có thể hữu ích. – prunge