Tệp được đề cập không nằm trong tầm kiểm soát của tôi. Hầu hết các chuỗi byte là hợp lệ UTF-8, nó không phải là ISO-8859-1 (hoặc một mã hóa khác). Tôi muốn làm hết sức mình để trích xuất càng nhiều thông tin càng tốt.Làm thế nào để phát hiện các chuỗi byte UTF-8 bất hợp pháp để thay thế chúng trong java inputstream?
Tệp có chứa một vài chuỗi byte bất hợp pháp, những tệp này phải được thay thế bằng ký tự thay thế.
Nó không phải là một nhiệm vụ dễ dàng, nó nghĩ rằng nó đòi hỏi một số kiến thức về máy trạng thái UTF-8.
Oracle có một wrapper mà làm những gì tôi cần:
UTF8ValidationFilter javadoc
Có một cái gì đó như thế có sẵn (mục đích thương mại hoặc phần mềm như miễn phí)?
Cảm ơn
-stephan
Giải pháp:
final BufferedInputStream in = new BufferedInputStream(istream);
final CharsetDecoder charsetDecoder = StandardCharsets.UTF_8.newDecoder();
charsetDecoder.onMalformedInput(CodingErrorAction.REPLACE);
charsetDecoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
final Reader inputReader = new InputStreamReader(in, charsetDecoder);
Tôi ghét điều này. nhà sản xuất nội dung nên tạo nội dung hợp lệ, không yêu cầu người tiêu dùng đoán và sửa. Điều đó đã gây ra rất nhiều rắc rối trong ngành của chúng tôi. – irreputable