Советы по разработке: сортировка юникода и регулярное сопоставление

Java задняя часть Unicode

Введение

Мы знаем, что компьютеры впервые появились в зарубежных странах.Из-за того, что в то время учитывалась производительность компьютеров и учитывались распространенные иностранные символы, компьютер сначала использовал ASCII.В конце концов, символы, которые могут быть представлены кодировкой ASCII, ограничены. Всемирная популярность требует большего количества методов кодирования, которые могут представлять символы по всему миру.Этот метод кодирования — юникод.

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

Сегодня мы обсудим сортировку и регулярное сопоставление символов в кодировке Юникод.

Сортировка символов ASCII

Полное название ASCII — Американский стандартный код для обмена информацией, который является американским стандартным кодом для обмена информацией, Пока в ASCII всего 128 символов. Состав символов ASCII здесь подробно не обсуждается. Заинтересованные студенты могут ознакомиться с моей предыдущей статьей о юникоде.

Символы ASCII содержат 26 букв, давайте посмотрим, как кодировать символы ASCII в javaScript:

const words = ['Boy', 'Apple', 'Bee', 'Cat', 'Dog'];
words.sort();
// [ 'Apple', 'Bee', 'Boy', 'Cat', 'Dog' ]

Как видите, символы отсортированы в том порядке, в котором мы хотим, чтобы словарь находился в нем.

Но если вы измените эти символы на китайские, а затем отсортируете, вы не получите нужных нам результатов:

const words = ['爱', '我', '中', '华'];
words.sort();
// [ '中', '华', '我', '爱' ]

Почему это?

На самом деле сортировка по умолчанию заключается в преобразовании строки в байты, а затем в лексикографической сортировке в соответствии с байтами. Если это китайский язык, он не будет преобразован в локальный текст.

Сортировка местных персонажей

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

Таким образом, приведенное выше «люби меня, Китай» на самом деле является сравнением порядка пиньинь «ай», «во», «чжун», «хуа».

Есть ли простой способ сравнить?

В некоторых браузерах для сравнения локальных символов предусмотрены два метода: Intl.Collator и String.prototype.localCompare.

Например, я нахожусь в версии Chrome 91.0:

Использование Intl.Collator даст результат, а использование String.prototype.localCompare — нет.

Взгляните на версию firefox 89.0:

Результат такой же, как у хрома.

Ниже приведен результат выполнения версии nodejs v12.13.1:

Видно, что в nodejs нет преобразования и сортировки локальных символов.

Поэтому два вышеуказанных метода относятся к браузеру, то есть относятся к конкретной реализации. Мы не можем полностью доверять этому.

Итак, сортировка строк — очень глупая вещь!

почему бы не использовать юникод для сортировки

Так почему бы не использовать юникод для сортировки?

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

Во-вторых, сортировать даже по локальным символам очень сложно, потому что браузерам нужна поддержка локализованной сортировки для разных языков. Это делает нагрузку огромной.

Регулярное сопоставление смайликов

В конце статьи поговорим о проблеме регулярного сопоставления эмодзи.

Эмодзи — это серия выражений, мы можем использовать юникод для их представления, но выражений эмодзи очень много, почти 3521. Если мы хотим выполнять регулярное сопоставление эмодзи, нам нужно написать следующий код:

(?:\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c\udffc|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d
[... 后面省略很多]

Сделайте снимок, чтобы наглядно увидеть, сколько здесь выражений эмодзи:

Есть ли простой способ регулярно сопоставлять смайлики с таким количеством смайликов? Ответ положительный.

Уже в предложении ECMAScript TC39 в стандарт было добавлено регулярное сопоставление эмодзи, и мы можем использовать {Emoji_Presentation} для его представления.

\p{Emoji_Presentation}

Разве это не просто?

Суммировать

В этой статье кратко представлены правила сортировки локальных символов и регулярное сопоставление выражений эмодзи. Надеюсь, она поможет вам в практической работе.

Эта статья была включена вWoohoo. Freudpress.com/04-Unicode-…

Самая популярная интерпретация, самая глубокая галантерея, самые краткие уроки и множество трюков, о которых вы не знаете, ждут вас!