gpt4 book ai didi

c++ - 如何将UTF-8文本从文件转换为可以迭代的容器并检查C++中每个符号是否为字母数字?

转载 作者:行者123 更新时间:2023-12-01 14:52:12 26 4
gpt4 key购买 nike

我阅读了大约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++ latest)时,我在UTF-8中仍然有 á,在UTF-16中仍然有 á

最佳答案

L"á"表示使用错误的编码读取了文件。阅读流之前,您必须imbue一个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上进行迭代。

关于c++ - 如何将UTF-8文本从文件转换为可以迭代的容器并检查C++中每个符号是否为字母数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62520770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com