Какие символы считаются одним и тем же символом при сопоставлении UTF8 Unicode?А какую функцию VB.net можно использовать для их объединения? - PullRequest
2 голосов
/ 23 марта 2012

Кроме того, что это за функция vb.net, которая отображает все эти разные символы в их наиболее стандартную форму.

Например, tolower будет отображать символы A и a в один и тот же символ справа?

Мне нужна та же самая функция для этих символов

немецкий

ß === s Ü === u Χιοσ == Χίος

В противном случае иногда я вставляю Χιοσ, а последний, когдаЯ вставляю в MySQL жалобы на то, что идентификатор уже существует.

Поэтому я хочу создать уникальный идентификатор, который отображает все эти странные символы в более стабильный.

1 Ответ

1 голос
/ 02 июля 2012

Что касается аспекта кодирования, посмотрите на String.Normalize.Обратите внимание также на его перегрузку, которая задает конкретную нормальную форму , в которую вы хотите преобразовать строку, но нормальная форма по умолчанию (C) будет отлично работать почти для всех, кто хочет " отобразить все этиразличные символы в их самой стандартной форме".

Однако, все становится более сложным, когда вы перемещаетесь в базу данных и сталкиваетесь с сопоставлениями.

Нормализация Unicode никогда не меняет регистр символов,Он охватывает только случаи, когда символы в основном эквивалентны - выглядят одинаково 1 , означают одно и то же.Например,

 Χιοσ != Χίος,

Два сигма-символа считаются неэквивалентными , а акцентированная йота (\u1F30) эквивалентна последовательности из двух символов, простой йоты (\u03B9) и ударение (\u0313).

Похоже, ваша настоящая проблема в том, что вы используете строки Unicode в качестве первичных ключей, что не самая популярная практика проектирования баз данных ,Такие первичные ключи занимают больше места, чем необходимо, и с течением времени могут изменяться (даже если первоначальная версия приложения не планирует это поддерживать).Ох, и я забыл их чувствительность к сопоставлениям.Вместо того, чтобы идентифицировать записи по строкам Unicode, при вставке записей используйте схему базы данных , генерирующую бессмысленных последовательных целых чисел, и переводите строки Unicode в простые атрибуты записей.Таким образом, они могут быть такими же или разными, как вам угодно.

Может быть еще полезно нормализовать их перед сохранением с целью поиска и более безопасной последующей обработки;но используемый вами порядок сортировки без учета регистра больше не будет вас каким-либо образом ограничивать.


1 Практически то же самое в случае нормализации совместимости в противоположностьк канонической нормализации.

...