Glib :: ustring应该可以很好地与UTF8配合使用,但是在使用日语字符串时遇到了问题。
如果比较这两个字符串,“わたし”和“ワタシ”,使用==运算符或比较方法,它将回答这两个字符串是等于。
我不明白为什么。 Glib :: ustring如何工作?
我发现比较错误的唯一方法是比较不同大小的字符串。例如“海外わたわ”和“海外わた”。
很奇怪......
答案 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
わたし
ワタシ
这听起来很奇怪。