繁体   English   中英

如何在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? 目的是检查子串是否在Telugu(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 ie时

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)。

你可以看到这篇文章或者这个有关此转换的详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM