0

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

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

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

4

2 回答 2

2

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

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

于 2012-06-06T11:23:46.227 回答
1
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:让它实际查找所有代码点

于 2012-06-06T10:52:09.370 回答