首页 > 解决方案 > 在 C++ 中处理北欧字符的字符串很困难

问题描述

我尝试了很多方法来解决这个问题。我只想分割一个字符串或对每个字符做一些事情。一旦字符串中有北欧字符,就不可能分割该字符串。

length()如果我们查看内存使用情况,该函数会返回正确的答案,但这与字符串长度不同。"ABCÆØÅ"长度不是 6,是 9。每个特殊字符加一个。

谁有好的答案??

这里的测试,显示问题,一些字母和很多?标记。:-(

int main()
{
   string name = "some æøå string";
   for_each(name.begin(), name.end(), [] (char c) {
      cout << c;
      cout << endl;

   });
}

标签: c++

解决方案


如果您的终端支持 utf-8 编码,那么在您输入的字符串中使用 std::cout 应该没有问题,但是,您需要告诉编译器您输入了一个 utf8 字符串,如下所示:

int main()
{
   string name = u8"some æøå string";
   for_each(name.begin(), name.end(), [] (char c) {
      cout << c;
      cout << endl;

   });
   cout<<name; //this will also work
   return 0; //add this just to be tidy
}

您需要这样做,因为 UTF-8 中的字符可能需要 1、2、3 或 4 个字节,具体取决于其表面。

然后根据您需要做什么,例如在字符之间拆分,您应该创建一个函数来检测每个 utf8 字符的长度。然后为每个 utf8 字符创建一个“字符串”,并从原始字符串中提取所需数量的字符。有一个非常好的库(非常紧凑)utf8proc 可以让你做这些事情。
utf8proc在许多项目中帮助我解决了这类问题。


推荐阅读