簡體   English   中英

如何在Java中檢測字符集?

[英]How to detect charset in Java?

半年前,我遇到了煩人的問題。 而且仍然無法解決。 問題出在log4j-logging中,默認字符集為utf 8。

有時我會收到帶有不同編碼的消息CP1252。 (無法更改此方法)。 因此,登錄utf8會使文本不可讀。 我可以通過某種方式修復編碼,並且此文本在日志中可讀。

但是,如果我將“編碼修復”應用到普通郵件中,則會被弄亂。 我需要知道是否真的需要這種轉換。 不幸的是,我沒有想法。

正如deceze所評論的那樣,沒有可靠的方法可以自動檢測文本的編碼。

大多數編碼嘗試將1個字節用於字符,因為相同的字節序列表示不同編碼中的字符串完全不同。 您幾乎可以唯一可靠地做的就是說“它不是有效的UTF8字符串”,其他常用的編碼甚至沒有嚴格的規則,哪些字節序列對此無效。

最好的選擇是知道消息的編碼。 下一個選擇是將文本保留為“ utf8字符串”旁邊的字節數組。

如果您接受的編碼集非常有限(utf8 / utf16 / cp1252),則可以嘗試使用一些啟發式方法進行檢測-即,UTF16中的大多數英文字符串的其他每個字節都將為0,並且可以嘗試查看是否字符串作為UTF8是可以的-如果不是-則可能是剩余的編碼。

Apache Tika包含一個開源編碼檢測器。

也有商業選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM