我想获取此字符串中每个字符的代码点“عربى” 所以我写这段代码,但它总是输出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;
}
有什么建议吗? :)
答案 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