Я использую 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ǐ-части, но они работают только при сочетании его с другим символом. Что здесь не так?