Glib :: ustring和日文字符

时间:2010-03-18 08:37:54

标签: c++ string glib

Glib :: ustring应该可以很好地与UTF8配合使用,但是在使用日语字符串时遇到了问题。

如果比较这两个字符串,“わたし”和“ワタシ”,使用==运算符或比较方法,它将回答这两个字符串是等于。

我不明白为什么。 Glib :: ustring如何工作?

我发现比较错误的唯一方法是比较不同大小的字符串。例如“海外わたわ”和“海外わた”。

很奇怪......

2 个答案:

答案 0 :(得分:1)

Glib::ustring::compare在内部使用g_utf8_collate(),它根据当前语言环境的规则比较字符串。您的语言环境是否设置为日语之外的其他内容?

答案 1 :(得分:1)

#include <iostream>
#include <glibmm/ustring.h>
int main() {
  Glib::ustring s1 = "わたし";
  Glib::ustring s2 = "ワタシ";
  std::cerr << (s1 == s2) << std::endl;
  return 0;
}

输出:0

编辑:但我深入挖掘了一下:

#include <iostream>
#include <glibmm.h>
int main() {
  Glib::ustring s1 = "わたし";
  Glib::ustring s2 = "ワタシ";
  std::cout << (s1 == s1) << std::endl;
  std::cout << (s1 == s2) << std::endl;
  std::locale::global(std::locale(""));
  std::cout << (s1 == s1) << std::endl;
  std::cout << (s1 == s2) << std::endl;
  std::cout << s1 << std::endl;
  std::cout << s2 << std::endl;
  return 0;
}

输出:

1
0
1
1
わたし
ワタシ

这听起来很奇怪。