2013-07-09 57 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