2013-02-05 36 views
6

Tôi có một số byte cần mã hóa UTF-8, nhưng có thể chứa văn bản là mã hóa ISO8859-1, nếu người dùng bằng cách nào đó không quản lý được trình soạn thảo văn bản của mình đúng cách.Làm thế nào để InputStreamReader thất bại trên dữ liệu không hợp lệ để mã hóa?

Tôi đọc các tập tin với một InputStreamReader:

InputStreamReader reader = new InputStreamReader( 
    new FileInputStream(file), Charset.forName("UTF-8")); 

Nhưng mỗi khi người dùng sử dụng umlauts như "a", đó là không hợp lệ UTF-8 khi lưu trữ trong iso8859-1 các InputStreamReader không phàn nàn nhưng thêm ký tự giữ chỗ.

Có cách nào đơn giản để thực hiện việc này ném Ngoại lệ trên đầu vào không hợp lệ?

Trả lời

6
CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder(); 
decoder.onMalformedInput(CodingErrorAction.REPORT); 
decoder.onUnmappableCharacter(CodingErrorAction.REPORT); 
InputStreamReader reader = new InputStreamReader(
    new FileInputStream(file), decoder); 
+0

Cảm ơn! Không biết có một API để làm điều này. – Daniel

1

Chỉ cần thêm .newDecoder():

InputStreamReader reader = new InputStreamReader( 
    new FileInputStream(file), Charset.forName("UTF-8").newDecoder()); 
Các vấn đề liên quan