2010-02-12 28 views
7

Có ai biết nếu có một cách đơn giản để phát hiện mã hóa bộ ký tự trong Java? Dường như với tôi rằng một số chương trình có khả năng phát hiện ký tự nào đã đặt một đoạn dữ liệu nhất định sử dụng, hoặc ít nhất là thực hiện một phép tính aproximation.Cách phát hiện mã hóa bộ ký tự nào trong Java?

Tôi cho rằng cơ chế cơ bản sẽ phải giải mã dữ liệu trong mỗi bộ ký tự và chọn bất kỳ cái nào có các ký tự không xác định ít nhất theo sau là bộ ký tự nào phổ biến hơn để ngắt liên kết.

Bất kỳ ý tưởng nào?

+0

Chúng ta đang nói về đầu vào nào? Mảng byte (nhị phân) hoặc mảng char (String)? Bạn muốn phân biệt cái nào sau đó? Nó có thể chỉ được thực hiện cho các bảng mã Unicode (với các dấu thứ tự byte), nhưng không phải là độ tin cậy cho những người khác. – BalusC

+1

Điều này có thể phức tạp. Tại trang web này pfarland đang sử dụng một số chẩn đoán: http://forums.sun.com/thread.jspa?threadID=279203#3 – mre

+1

Các chủ đề liên quan: http://stackoverflow.com/questions/499010/java-how-to -determine-the-correct-charset-mã hóa-of-a-stream và http://stackoverflow.com/questions/1888189/java-readers-and-encodings – BalusC

Trả lời

-3

Để tìm dữ liệu ở định dạng unicode (UTF-8, UTF-16 ... vv), bạn có thể đọc dữ liệu trong luồng byte và kiểm tra 4 byte đầu tiên (kích thước BOM) và cho mỗi mã hóa nó sẽ khác nhau

cho ví dụ:

cho UTF-8 3 byte đầu tiên sẽ là EF, BB, BF

cho mã hóa khác hơn là mã hóa unicode tôi không chắc chắn ...

+4

Bảng tùy chọn UTF-8 chỉ hữu ích nếu nó hiện diện : http://en.wikipedia.org/wiki/Byte_order_mark – trashgod

+0

@sreejith .. giải pháp BOM ở trên chỉ có thể được sử dụng để cho biết rằng một tệp không phải là UTF-8 (trong trường hợp đó nó sẽ không bắt đầu với BOM đã cho). Nhưng nếu BOM có mặt, nó có thể là UTF-8 hay không. Ví dụ: có thể đối với một số tệp khác, các byte ban đầu "EF, BB, BF" thực sự là dữ liệu hợp lệ.! –

1

Hãy xem jchardet, một thư viện được chuyển từ trình duyệt Mozilla chuyên về "đoán" bộ ký tự của tài liệu.

Cách khác, thư viện cpdetector, mới hơn một chút, chuyên phát hiện trang mã của tài liệu.

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