如何检测Windows-1251编码的字符

时间:2013-07-09 09:15:57

标签: android character-encoding cyrillic

是否有正确的方法来检测Windows-1251个编码字符?

IMO与多字节本地字符不同,Windows-1251是一个8位字符编码,因此无法将其与latin1等其他8位本机字符区分开来。如果我错了,请纠正我。

我的第一个线索是locale,如果区域设置为non-ascii,我会将所有Windows-1251个字符设为ru

有没有更好的方法?

更新:

以下是我的问题的上下文,MP3文件的Windows-1251信息中有一些ID3个编码字符,我必须检测Windows-1251个编码字符,然后转换它们使用icu4c转换为UTF-16,否则这些Windows-1251编码的字符在我的系统上将无法读取(Android)。我想也许你们中有些人有更好的方法。

2 个答案:

答案 0 :(得分:1)

GetACP函数可用于确定此问题。它返回当前对系统有效的ANSI代码页的标识符。

可以找到记录的代码页标识符列表here。您正在寻找的是1251,它对应于“ANSI Cyrillic(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;
}

答案 1 :(得分:0)

当作为输入给出8位字符的数组时,没有可靠的方法来检测,这些字符使用了8位编码。