我是 C++ 新手,没有 CS 背景。因此,如果这个问题很愚蠢或者之前已经被回答过,请原谅我。
\n\n我有一个 C++ 字符串,语言是泰卢固语。
\n\nstd::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);\nRun 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\nstd::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);\nRun Code Online (Sandbox Code Playgroud)\n\n输出是“ffeo 65504”
\n\n但是当我使用 wstring ie 时
\n\nstd::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);\nRun Code Online (Sandbox Code Playgroud)\n\n输出是“c09 3081”,我认为这是正确的输出。\n我不确定,但这就是你想要的。让我知道
\n| 归档时间: |
|
| 查看次数: |
2862 次 |
| 最近记录: |