Я использую 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)
Постскриптум Мне не очень нравятся сторонние инструменты, если они не очень популярны во всем мире, или нет другого выбора.
Вам нужно использовать 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
.
Если вы используете PHP 7.2+, вы можете использовать mb_ord упростить преобразование.
echo dechex(mb_ord("爱"));