Glib::ustring 应该可以很好地与 UTF8 一起使用,但是在使用日文字符串时我遇到了问题。
如果你比较这两个字符串,“わたし”和“ワタシ”,使用 == 运算符或比较方法,它会回答这两个字符串是相等的。
我不明白为什么。Glib::ustring 是如何工作的?
我发现比较错误的唯一方法是比较不同大小的字符串。例如“海外わたわ”和“海外わた”。
很奇怪...
#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
わたし
ワタシ
这听起来很奇怪。
Glib::ustring::compare
在内部使用g_utf8_collate()
,它根据当前语言环境的规则比较字符串。您的语言环境是否设置为日语以外的其他内容?