Юникод вопрос под iOS - PullRequest
1 голос
/ 24 июля 2011

У меня есть база данных SQLite со списком слов.В таблице есть список слов, который включает в себя слово «você».Это слово имеет такое представление в юникоде "voc \ U00ea".

Я обнаружил, что одно и то же слово может иметь следующее представление с одинаковым визуальным выводом:

"voc\U00ea",
"voce\U0302"

Когда язапросить мой БД, используя второе представление, он возвращает пустым.Кто-нибудь знает способ работы запроса с использованием обоих представлений без дублирования записей в таблице?

Спасибо, Мигель

1 Ответ

6 голосов
/ 24 июля 2011

Эти две формы известны как nfc (составленная нормальная форма) и nfd («разложенная нормальная форма»). Буква \U0302 известна как «объединяющая окружность», которая изменяет предыдущую букву.

Чтобы справиться с этой ситуацией, сделайте следующее:

  1. Выберите нормализацию. Обычно выбор nfc - хорошая идея. (Хотя файловая система iOS / OS X использует nfd.)
  2. Прежде чем помещать строку в базу данных, всегда нормализуйте. В iOS вы можете использовать precomposedStringWithCanonicalMapping или precomosedStringWithCompatibilityMapping. Чтобы понять разницу между каноническим отображением и отображением совместимости, см. в этом описании .
  3. Перед выполнением запроса всегда нормализуйте запрос к одной и той же нормальной форме.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...