Как преобразовать китайский символ в кодовые единицы UTF-16?

Я использую PHP для этого проекта веб-разработки. Сейчас я работаю над страницей пользователя, где пользователь может добавлять слова, которые он знает. Конечно, я начинаю сыро, без добавления каких-либо специальных функций, таких как «Знаешь ли ты это предложение персонажа» и т. Д.

Я решил проблему добавления набора параметров сортировки и кодировки UTF-16 к UTF-16 в моей базе данных MySQL, фактически на сайте http://freemysqlhosting.net поддерживать китайские иероглифы на моем сайте. Теперь я борюсь за поддержку автоматической генерации PinYin для моих китайских иероглифов.

Я нашел это после поиска по всему так: https://github.com/reorx/pinyindep/blob/master/Uni2Pinyin. Каждая строка начинается с китайского символа в кодовых единицах UTF-16.

Взять, к примеру, 爱. В UTF-16 это 7231. Я конвертирую это в https://r12a.github.io/apps/conversion/. Когда я делаю поиск в файле, я связываю пиньинь. : D Мне нужна эта функциональность, хотя поиск ее в GitHub сделан в JS, а не в PHP.

В ручном поиске возвращается ai4, что является правильной интонацией. Теперь я ищу встроенную библиотеку PHP или фрагмент кода для преобразования этого строкового ввода, скажем, «爱» в четырехсимвольный кодовый блок UTF-16, например здесь 7321.

Как мне преобразовать китайский символ в виде строки в кодовые единицы UTF-16? (Либо через встроенную библиотеку, либо через предложенный фрагмент кода PHP)

Постскриптум Мне не очень нравятся сторонние инструменты, если они не очень популярны во всем мире, или нет другого выбора.

0

Решение

Вам нужно использовать PHP многобайтовая строка модуль:

$c = "爱";
list(, $d) = unpack('N', mb_convert_encoding($c, 'UCS-4BE', 'UTF-8'));
echo dechex($d);
// => 7231

+ Изменить UTF-8 в UTF-16 если ваша строка приходит из базы данных в этой кодировке.

mb_convert_encoding изменит строку в четырехбайтовую кодировку; затем unpack преобразует четыре байта в длинную без знака; наконец, преобразование в шестнадцатеричную строку с помощью dechex.

2

Другие решения

Если вы используете PHP 7.2+, вы можете использовать mb_ord упростить преобразование.

echo dechex(mb_ord("爱"));

0

По вопросам рекламы [email protected]