如何获取特定 WCHAR 字符的代码点

How to get codepoint of particular WCHAR character?

本文关键字:字符 WCHAR 代码 何获取 获取      更新时间:2023-10-16

例如,我需要这里的第 5 个字符codepoint,即ð

const WCHAR* mystring = L"Þátíð";

我知道它有代码点:U+00F0 - 但是如何使用c ++获取这个整数?

Windows 2000 及更高版本中的 WCHAR 是 UTF-16LE,因此按索引访问字符串中的特定字符不一定安全。您应该使用 CharNext 之类的东西来遍历字符串,以正确处理代理项对和组合字符/变音符号。

在这个特定的例子中,Forgottn的答案取决于编译器发出áí字符的预组成版本......(对于大多数Windows编译器来说可能是这样,移植到Mac OS可能是有问题的)

const WCHAR myString[] = L"Þátíð";
size_t myStringLength = 0;
if(SUCCEEDED(StringCchLengthW(myString, STRSAFE_MAX_CCH, &myStringLength))
{
    LPCWSTR myStringIterator = myString;
    for(size_t sz = 0; sz < myStringLength; ++sz)
    {
        unsigned int mySuperSecretUnicodeCharacter = *myStringIterator;
        LPCWSTR myNextIterator = CharNext(myStringIterator);
        std::vector<unsigned int> diacriticsOfMySuperSecretUnicodeCharacter(myStringIterator+1, myNextIterator);
        myStringIterator = myNextIterator;
    }
}

编辑1:使其实际工作

编辑2:使其实际查找所有代码点