可能重複:
Java : How to determine the correct charset encoding of a stream獲取文件的編碼在Java中
用戶將上傳CSV文件到服務器,服務器需要檢查CSV文件編碼爲UTF-8 。如果需要通知用戶,他(s)他上傳了一個錯誤的編碼文件。問題是如何檢測用戶上傳的文件是UTF-8編碼?後端是用Java編寫的。所以任何人都能得到這個建議?
可能重複:
Java : How to determine the correct charset encoding of a stream獲取文件的編碼在Java中
用戶將上傳CSV文件到服務器,服務器需要檢查CSV文件編碼爲UTF-8 。如果需要通知用戶,他(s)他上傳了一個錯誤的編碼文件。問題是如何檢測用戶上傳的文件是UTF-8編碼?後端是用Java編寫的。所以任何人都能得到這個建議?
至少在一般情況下,有沒有辦法肯定是幹什麼用的編碼文件 - 最好你可以做的是基於啓發式的合理猜測。你可以消除一些可能性,但充其量只是在縮小可能性而不確認任何可能性的情況下。例如,大多數ISO 8859變體允許使用任何字節值(或字節值模式),因此幾乎所有的內容都可以用幾乎所有的ISO 8859變體進行編碼(而且我只使用「幾乎」出於謹慎,沒有任何確定性,你可以消除任何可能性)。
但是,您可以做出一些合理的猜測。例如,一個以UTF-8編碼BOM(EF BB BF)的三個字符開頭的文件,假設它真的是UTF-8可能是安全的。同樣,如果您看到像110xxxxx 10xxxxxx這樣的序列,這是一個非常合理的猜測,您所看到的是用UTF-8編碼的。如果您看到像110xxxxx 110xxxxx這樣的序列,則可以消除UTF-8被正確識別的可能性(正確)。 (110xxxxx是序列的前導字節,其中必須跟隨一個非前導字節,而不是正確編碼的UTF-8中的另一個前導字節)。
那麼,你不能。你可以用文件中的一些示例數據顯示一種「預覽」(或者我應該說是評論?),以便用戶可以檢查它是否看起來沒問題。也許可以選擇不同的編碼選項來幫助確定正確的編碼選項。
你可以嘗試使用第三方庫猜編碼,例如:http://glaforge.free.fr/wiki/index.php?wiki=GuessEncoding