2013-07-09 64 views
1

是否有正確的方法來檢測Windows-1251編碼字符?如何檢測Windows-1251編碼字符

IMO,不同於多字節本機字符,Windows-1251是一個8位的字符編碼,所以它不可能從其它8位本地字符像latin1區分。如果我錯了,請糾正我。

第一條線索對我來說是locale,我把所有的non-ascii字符Windows-1251如果語言環境是ru

有沒有更好的方法?

UPDATE:

這裏是我的問題的情況下,也有一個MP3文件的ID3信息有些Windows-1251編碼的字符,我必須檢測Windows-1251編碼的字符,然後使用它們轉換爲UTF-16 icu4c,否則這些Windows-1251編碼的字符將在我的系統(Android)上顯示爲不可讀。我認爲也許你們有更好的方法。

+0

你想從中發現什麼? –

+0

某些MP3文件在Windows-1251中編碼的ID3標籤中具有西里爾文字符。 – Alan

+0

因此,您希望能夠拍攝MP3文件並辨別ID3標籤是否在1251中編碼? –

回答

0

有檢測沒有可靠的方法中,當作爲輸入給定的8個字符,其中8位編碼已被用於這些字符陣列。

+0

所以使用locale實際上是一種正確的方法? – Alan

+1

否。我的機器不使用1251,當您將文件移動到我的機器時,您的文件仍將包含1251編碼標籤。 –

+0

我的意思是,如果語言環境是ru(俄語),那麼我將單字節非ascii字符視爲Windows-1251。因爲我們的目標市場是俄羅斯,所以我遇到了一些俄羅斯MP3文件中不可讀的字符問題。 – Alan

1

GetACP功能可以用來確定這一點。它返回系統當前活動的ANSI代碼頁的標識符。

代碼頁標識符的文檔列表可以找到here。您正在尋找的是1251,它對應於「ANSI西里爾文(Windows)」代碼頁。

從代碼使用非常簡單;例如在C:

#include <Windows.h> 

int main() 
{ 
    if (GetACP() == 1251) 
    { 
     MessageBoxW(NULL, 
        L"Your system uses the ANSI Cyrillic code page.", 
        L"Code Page Detection", 
        MB_OK | MB_ICONINFORMATION); 
    } 
    return 0; 
} 
+0

謝謝,但也許你誤解我的問題,因爲我的英語不好。實際上,我必須區分本機字符以查看它是否是Windows-1251(西裏爾字母)編碼,如果是的話,我會使用icu4c將它們轉換爲UTF。我是否清楚自己? – Alan