在C ++中获取unicode字符的CodePoint

时间:2014-08-08 10:35:13

标签: c++ string unicode

我想获取此字符串中每个字符的代码点“عربى” 所以我写这段代码,但它总是输出63,这是问号字符“?”

的代码点
TCHAR   myString[50] = _T("عربى");
int stringLength=_tcslen(_T(myString));

for(int i=0;i<stringLength;i++)
{
   unsigned int number =myString[i];
   cout<<number<<endl;
}

有什么建议吗? :)

2 个答案:

答案 0 :(得分:2)

此处的代码仅使用标准库,并以32位宽代码单位迭代字符串。在最新的UTF-32中,这与代码点匹配。

using namespace std;
const auto str = u8"عربى";
wstring_convert<codecvt_utf8<char32_t>, char32_t> cv;
auto str32 = cv.from_bytes(str);
for(auto c : str32)
    cout << uint_least32_t(c) << '\n';

如果您的标准库还没有实现这些功能,您应该使用外部库。

答案 1 :(得分:1)

我复制了您的代码,并将_T(myString)强制转换为简单的myString,但它确实有效。这是完整的计划。

#include <afxwin.h>

#include <iostream>

int main() {
    using namespace std;

    TCHAR   myString[50] = _T("عربى");
    int stringLength = _tcslen(myString); // <----- edit here

    for(int i=0;i<stringLength;i++)
    {
       unsigned int number =myString[i];
       cout<<number<<endl;
    }
}

输出:

1593
1585
1576
1609