如何在不使用qt的情况下了解c++中的unicode块
How to know unicode block in c++ without using qt?
我有一个包含日语字符的文件,我想知道这行是否只包含片假名字符,而不使用Qtcore
trial.txt
包含:
こにちわ
おはよう
ナルト
我想让程序说第三行是所有片假名字符
该文件保存为"UTF-8 Unicode文本,带有CRLF行终止符"。
如果你认为这是一个重复的问题,请评论同一个已回答问题的链接。
/*
Unicode Ranges:
3040 — 309F Hiragana
30A0 — 30FF Katakana
*/
我使用的是C++、Visual Studio 2013、gcc 4.8.3,我当前的代码页是Unicode(带签名的UTF-8)。像u8
这样的前缀不起作用(我不知道为什么,它应该起作用)。
我编辑了在研究这一问题时发现的两个代码。
我决定采纳Joachim Pileborg的建议,将文件解码为UTF-32,并使用UTF-32十进制值设置范围
//conversion from http://en.cppreference.com/w/cpp/locale/wstring_convert/converted
void utf8ToUtf32(string line){
string utf8 = line;
// the UTF-8 - UTF-32 standard conversion facet
wstring_convert<codecvt_utf8<char32_t>, char32_t> cvt;
// UTF-8 to UTF-32
u32string utf32 = cvt.from_bytes(utf8);
//printing of decimal val inspired by http://www.cs.ucr.edu/~cshelton/courses/cppsem/strex.cc
cout << utf32.length() << ": ";
for (char32_t c : utf32) {
cout << hex << c << ' ';
writeFile << c << ' ';
if (c >= 12450 && c <= 12543) cout << "k ";
}
cout << dec << endl;
writeFile << dec << endl;
}
我知道可能还有其他方法可以做到这一点,但以我现有的时间框架来看,这已经足够好了。
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在没有信号的情况下从C++执行QML插槽
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 为什么在某些情况下不写入此文件?
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 了解如何在不冻结事件循环的情况下在 QThread 中休眠/等待
- 了解 declval 在copy_assignment情况下的工作方式
- 在SEGFAULT的情况下,了解GDB输出
- 递归函数是否可以在不将常量作为参数发送的情况下了解首次调用它的函数中的常量
- 如何在不使用qt的情况下了解c++中的unicode块
- 试图在不了解某些内容的情况下编译.h文件