4

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

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

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

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

很奇怪...

4

2 回答 2

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
わたし
ワタシ

这听起来很奇怪。

于 2010-03-27T16:04:12.967 回答
1

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

于 2010-03-18T10:40:05.353 回答