Glib :: ustring и японские иероглифы - PullRequest
4 голосов
/ 18 марта 2010

Glib :: ustring должен хорошо работать с UTF8, но у меня проблема при работе с японскими строками.

Если вы сравните эти две строки, «わ た し» и «ワ タ シ», используя оператор == или метод сравнения, он ответит, что эти две строки равны.

Я не понимаю, почему. Как работает Glib :: ustring?

Единственный способ ошибиться в сравнении - сравнить строки разных размеров. Например, «海外 わ た わ» и «海外 わ た».

Очень странно ...

Ответы [ 2 ]

1 голос
/ 27 марта 2010
#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
わたし
ワタシ

И это звучит странно.

1 голос
/ 18 марта 2010

Glib::ustring::compare использует g_utf8_collate() внутри, что сравнивает строки в соответствии с правилами текущей локали. Ваш язык настроен на что-то отличное от японского?

...