如何在c++中检查字符的unicode值的范围
How to check range of unicode value of character in c++
我是C++的新手,来自非CS背景。因此,如果这个问题很愚蠢或以前已经回答过,请原谅我。
我有一个用c++编写的字符串,语言是泰卢固语。
std::string str = "ఉంది"; // (it means exists; pronounced as Vundi)
std::string substring = str.substr(0,3);
上面的子字符串将是"ఉ"(发音为Vu),其unicode十六进制值为0C09。
如何从子字符串中获取值0C09?目的是检查子字符串是否在泰卢固语(0C00–0C7F)的有效范围内。
我已经看到了它们应用于obj-c、java、php、c#等的其他问题。我正在使用std::string专门寻找c++。
根据评论,我已经在joelonsoftware.com/articles/Unicode.html上阅读了这篇文章。
让我用更多信息更新我的问题。我使用的是Fedora 19 x86_64,编码为UTF-8。控制台能够正确显示文本。
根据这篇文章,如果我理解正确的话,ASCII是单字节字符,unicode是多字节字符。上面的代码示例反映了这一点,这里每个unicode字符的长度为3个字节。除了讨论UTF-8/文本编码和多字节字符之外,本文在检测unicode字符串的语言方面没有提供任何实际帮助。
也许我应该重新表述我的问题:
如何在C++中检测unicode字符串的语言?
提前感谢您的帮助。
使用字符串,我得到的结果是
std::string str = "ఉంది"; // (it means exists; pronounced as Vundi)
unsigned short i =str[0];
printf("%x %d",i,i);
输出为"ffeo 65504"
但当我使用wstring时,即
std::wstring str = L"ఉంది"; // (it means exists; pronounced as Vundi)
unsigned short i =str[0];
printf("%x %d",i,i);
输出是"c09 3081",我认为这是正确的输出。我不确定,但那是你想要的吗。让我知道
您可以使用ICU,也可以通过查看字符串中的连续字符手动将UTF-8转换为UTF-16/32。有关UTF-8多字节字符的解释,请参阅此处。
ICU还包括unicode字符属性,这可能有助于检测脚本。
std::string
没有任何内置的UTF-8到UTF-16/32转换支持,因此substr
也不能返回unicode字符。
您需要从编码(可能是utf8)(char*)转换为宽字符(wchar_t)。
您可以看到这篇文章或这篇文章,了解有关此转换的更多信息。
- 为什么在全局范围内使用"extern int a"似乎不行?
- 尝试通过多个向量访问变量时,向量下标超出范围
- 错误:未在此范围内声明'reverse'
- 正在将指针转换为范围
- 使用std::transform将一个范围的元素添加到另一个范围中
- 在基于范围的for循环中使用结构化绑定声明
- C++ - Unicode Newline
- 如何计算数据类型的范围,例如int
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 在C++中查找范围的长度
- 如何设置一个范围来提取我想要获得的信息
- 如何将unicode字符串从C++传递到delphi
- 并行用于C++17中数组索引范围内的循环
- 为左值和右值的包装器实现C++范围
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 超出范围时使用对象
- 如何在 PEGTL 的 c++ 中通过属性/标识符定义 unicode 范围
- 尝试用C++打印时,Unicode范围超出
- 如何在c++中检查字符的unicode值的范围