UTF8 Расшифровка китайских иероглифов - PullRequest
0 голосов
/ 01 февраля 2020

Я использую node.js и express для создания API, который преобразует китайские иероглифы в их правописание c (пиньинь), но у меня возникают некоторые проблемы с декодированием / кодированием utf8. Мой запрос PHP Curl к этому API кодирует символы вроде этого:

你好 (nǐ​hǎo) => ä½ å¥½

... поэтому я должен декодировать их в своем приложении узла. Я использую следующую функцию:

function decode_utf8(s) {
    return decodeURIComponent(escape(s));
}

, и она прекрасно работает в большинстве случаев. Однако я заметил странное поведение. Вот два ввода: значение после escape() и значение после decodeURIComponent():

你好 (nǐ​hǎo): ä½ å¥½ => %E4%BD%A0%E5%A5%BD => 你好
你 (nǐ​): ä½ => %E4%BD => URIError: URI malformed

Первый (nǐ hǎo) работает, но только с использованием первого из двух символов (nǐ ) Это дает мне URIError? Как это возможно? Входные данные для функции decodeURIComponent() такие же, как и для nǐ-части, но они работают только при сочетании его с другим символом. Что здесь не так?

1 Ответ

1 голос
/ 01 февраля 2020

Строка, которую вы пытаетесь декодировать, не соответствует действительному utf8. Что-то не так с вашим запросом PHP Curl, потому что он неправильно кодирует 你 (nǐ​). Значение в процентах должно быть 你 => %E4%BD%A0

...