2010-07-09 53 views
5

Tôi biết tệp UTF có BOM để xác định mã hóa nhưng mã hóa nào khác có mã vạch không biết cách đoán mã hóa đó.cách xác định mã hóa văn bản

Tôi là lập trình viên java mới. Tôi đã viết mã để đoán mã hóa UTF bằng UTF BOM. nhưng tôi gặp sự cố với mã hóa khác. Làm thế nào để tôi đoán chúng.

Bất kỳ ai cũng có thể giúp tôi? cảm ơn trước.

Trả lời

0

Câu trả lời ngắn gọn là: bạn không thể.

Ngay cả trong UTF-8, BOM hoàn toàn không bắt buộc và thường không được sử dụng vì nhiều ứng dụng không xử lý đúng cách và chỉ hiển thị nó như thể nó là một bản in được. Mục đích ban đầu của Bộ đánh dấu đơn hàng Byte là nói ra tính xác thực của các tệp UTF-16.

Điều này cho biết, hầu hết các ứng dụng xử lý Unicode đều triển khai một số thuật toán đoán. Đọc phần đầu của tập tin và tìm các chữ ký nhất định.

0

Nếu bạn không biết mã hóa và không có bất kỳ chỉ báo nào (như BOM), không phải lúc nào cũng có thể "đoán" mã hóa chính xác. Một số con trỏ tồn tại có thể cho bạn gợi ý.

Ví dụ: tệp ISO-8859-1 sẽ (thường) không có bất kỳ ký tự 0x00 nào, tuy nhiên, tệp UTF-16 có nhiều tệp.

Giải pháp phổ biến nhất là cho phép người dùng chọn mã hóa nếu bạn không thể phát hiện ra nó.

+1

Tệp UTF-16 chứa văn bản tiếng Trung thực sự sẽ không có nhiều 0x00 byte. –

4

Câu hỏi này trùng lặp với severalpreviousones. Có ít nhất hai thư viện cho Java cố gắng đoán mã hóa (mặc dù hãy nhớ rằng không có cách nào để đoán đúng 100% thời gian).

Tất nhiên, nếu bạn biết được mã hóa sẽ chỉ có một trong ba hoặc bốn lựa chọn, bạn có thể để viết một thuật toán đoán chính xác hơn.

+0

+1 để tìm quá nhiều bản sao. –

Các vấn đề liên quan