如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
How to convert UTF-8 text from file to some container which can be iterable and check every symbol for being alphanumeric in C++?
我阅读了大约 20 个问题并检查了有关它的文档,但没有成功,我没有任何编写处理这些东西的代码的经验,我总是避免它。
假设我有一个文件,我相信它总是 UTF-8:
á
假设我有代码:
wifstream input{argv[1]};
wstring line;
getline(input, line);
当我调试它时,我看到它存储为L"á"
,所以基本上它不是我想要的可迭代的,我希望只有 1 个符号能够调用比方说iswalnum(line[0])
.
我意识到有一些编解码器方面,但我不确定如何使用它以及它是否是最佳方法,我使用 VS2019 中的 cl.exe,这给了我很多转换和弃用错误提供的示例: https://en.cppreference.com/w/cpp/locale/codecvt_utf8
我意识到有一个from_bytes函数,但我使用了VS2019中的cl.exe,这也在提供的示例中给我带来了很多错误: https://en.cppreference.com/w/cpp/locale/wstring_convert/from_bytes
那么如何正确阅读该行,假设该字母(符号(á
并能够将其迭代为大小为 1 的某个容器,以便可以简单地调用像iswalnum
这样的函数?
编辑:当我修复这些示例中的错误(对于c ++latest(时,我仍然á
UTF-8和UTF-16á
。
L"á"
表示文件被错误编码读取。在读取流之前,您必须灌输 UTF-8 语言环境。
wifstream input{argv[1]};
input.imbue(std::locale("en_US.UTF-8"));
wstring line;
getline(input, line);
现在wstring line
将包含 Unicode 代码点(在您的案例中á
(,并且可以轻松迭代。
警告:在Windows上,wchar_t
是有缺陷的(16位(,并且足以仅迭代BMP。
相关文章:
- 检查TCHAR数组输入是否为带符号整数C++
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- 如何检查为什么联动需要一些符号?
- 如何检查溢出将字符*[]转换为无符号短短
- 使用无符号数字进行图像边界检查
- 检查预处理器符号的值(#define)
- 使用范围检查和带符号的size_type扩展std::vector
- 如何检查一个名称是否与另一个名称引用相同的符号
- 用Spirit :: Qi检查加倍的符号
- 我如何检查静态库,以查看是否正在导出调试符号
- 如何在C 中检查符号
- C++如何检查函数是否接收到无符号int
- 检查无符号字符的std:array是否已初始化是一种好做法
- 如何检查字符串中是否存在除"-","_","."'@' C++之外的任何符号?
- 无符号整数的类型双关语是否可以通过消除 >= 比较的需要来加快边界检查速度?
- 使用无符号 int 与检查是否为负
- 如何使用 boost::filesystem 检查文件是常规文件还是符号链接
- 如何检查纯字符是有符号的还是无符号的
- 如何检查uint8_t是否作为类型而不是无符号字符存在
- 如何使用 if 检查字符串数组的第一个元素第一个符号?