如何在C++中检查字符的unicode值的范围

use*_*442 5 c++ unicode

我是 C++ 新手,没有 CS 背景。因此,如果这个问题很愚蠢或者之前已经被回答过,请原谅我。

\n\n

我有一个 C++ 字符串,语言是泰卢固语。

\n\n
std::string str = "\xe0\xb0\x89\xe0\xb0\x82\xe0\xb0\xa6\xe0\xb0\xbf"; // (it means exists; pronounced as Vundi)\nstd::string substring = str.substr(0,3);\n
Run Code Online (Sandbox Code Playgroud)\n\n

上面的子字符串将是“\xe0\xb0\x89”(发音为 Vu),其 unicode 十六进制值为 0C09。

\n\n

如何从子字符串中获取值 0C09?\n目的是检查子字符串是否在泰卢固语的有效范围内 (0C00\xe2\x80\x930C7F)。

\n\n

我已经看到了它们适用于 obj-c 、 java、 php、 c# 等的其他问题。我正在使用 std::string 专门寻找 c++。

\n\n

根据评论,我已阅读joelonsoftware.com/articles/Unicode.html上的文章。

\n\n

让我用更多信息更新我的问题。\n我使用的是 Fedora 19 x86_64,编码为 UTF-8。控制台能够正确显示文本。

\n\n

根据这篇文章,如果我理解正确的话,ASCII 是单字节字符,unicode 是多字节字符。上面的代码示例反映了这一点,这里每个 unicode 字符的长度为 3 个字节。除了讨论 UTF-8/ 文本编码和多字节字符之外,本文对检测 unicode 字符串的语言没有提供任何实际帮助。

\n\n

也许我应该重新表述我的问题:

\n\n

如何在 C++ 中检测 unicode 字符串的语言?

\n\n

预先感谢您的帮助。

\n

小智 1

使用字符串我得到的结果是

\n\n
std::string str = "\xe0\xb0\x89\xe0\xb0\x82\xe0\xb0\xa6\xe0\xb0\xbf"; // (it means exists; pronounced as Vundi)\nunsigned short i =str[0];\nprintf("%x %d",i,i);\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出是“ffeo 65504”

\n\n

但是当我使用 wstring ie 时

\n\n
std::wstring str = L"\xe0\xb0\x89\xe0\xb0\x82\xe0\xb0\xa6\xe0\xb0\xbf"; // (it means exists; pronounced as Vundi)\nunsigned short i =str[0];\nprintf("%x %d",i,i);\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出是“c09 3081”,我认为这是正确的输出。\n我不确定,但这就是你想要的。让我知道

\n