如何将 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])
。
我意识到有一些 codecvt 方面,但我不确定如何使用它以及它是否是最好的方法,我使用 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++),我仍然有 UTF-8 中的 á
和 UTF-16 中的 á
。
我阅读了大约 20 个问题并检查了有关它的文档但没有成功,我没有编写处理这些东西的代码的经验,我总是避免它。
假设我有一个文件,我确信它总是 UTF-8:
á
假设我有代码:
wifstream input{argv[1]};
wstring line;
getline(input, line);
当我调试它时,我看到它存储为 L"á"
,所以基本上它不是我想要的可迭代的,我希望只有 1 个符号能够调用比方说 iswalnum(line[0])
。
我意识到有一些 codecvt 方面,但我不确定如何使用它以及它是否是最好的方法,我使用 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++),我仍然有 UTF-8 中的 á
和 UTF-16 中的 á
。