2012-05-22 21 views
1

有沒有一種方法可以從ANSI CODEPAGE獲取java.nio.charset.Charset,並從某個語言環境獲取ansi代碼頁?舉例來說,如果我有語言環境「en_US」我想有字符集「CP1252」,這樣我就可以調用從locale到ansi codepage到java charset?

private final Charset CS1252 = Charset.forName("cp1252"); 

或當我有語言環境「 Ja_JP表示」日本,我想獲得相應的字符集,就像

private final Charset CS932 = Charset.forName("ms932"); 

我該如何在java中實現?所以,我需要的是像getCharsetForLocale(java.util.Locale中的LOC)的方法,

回答

4

你不能也沒有意義。實際上,任何語言都可以用幾種不同的字符編碼來編寫,例如英文可以寫成:ASCII,ISO8859-1,ISO-8859-15,Windows 1252,UTF-7,UTF-8,UTF-16,UTF- 32和許多,更多,基本上與所有的Windows代碼頁面爲例。

我不知道你在找什麼,所以讓我建議這樣的:

  1. 如果你正在尋找保存數據,使用UTF-8無論區域設置。總是。是的,總是。不要擔心空間,對於許多語言來說,它足夠高效,磁盤空間便宜。

  2. 如果您想知道用戶可以使用什麼樣的字符編碼,認爲它們僅限於單個字符編碼是無效的。相反,您可能會想到使用ICU Charset Detector來檢測編碼(閱讀更多關於檢測here)。

  3. 如果您想知道系統的當前代碼頁,那麼最簡單的方法就是調用Charset.defaultCharset()(與操作系統無關!)。

下一次,請嘗試首先描述您的問題,您想要達到的目標以及您已經嘗試的目標。

+0

+1總是推薦UTF-8 – michael667

+1

謝謝,我進一步研究了這個問題,並且我需要爲一個語言環境名稱找到ANSI-CODEPAGE。而對於這個ansi-codepage,我需要一個java中的字符集對象。 –

+1

@Christian:如果它是.Net,那會很容易。不幸的是,在Java中沒有CultureInfo的直接,因此你只需要「手動」映射。 –

0

我認爲你正在試圖獲取可以通過類字符集的name()方法獲得的字符集的Canonical Name

+0

我擁有的只是像「en_US」這樣的語言環境,並且還沒有字符集!好吧,我可以做的是遍歷所有可用的字符集,並嘗試將我的語言環境與規範名稱匹配,當我有匹配時,我也有我的字符集。但這似乎並不是最好的解決方案。 –

+0

順便說一句,name()不返回語言環境... –

0

AFAIK,locale和charset之間沒有內在聯繫。您期望哪些字符集適用於區域設置en_US? ASCII/CP1252 /的MacRoman/ISO-8859-1/UTF-8/UTF-16?

對於日語,您至少可以使用Shift JIS,CP932,EUC-JP,ISO-2022-JP或UTF-8中的一種。