Автоматическая кодировка UTF-8 в HTTP-клиенте Node.js - PullRequest
3 голосов
/ 11 сентября 2010

Там я пытаюсь загрузить XML-контент с удаленного хоста, используя Node.js.

Проблема в том, что немецкий "umlaute", такой как "ä", не работает.Как и в браузере, это обычно простая проблема кодирования.Но так как содержимое XML на удаленном хосте закодировано в iso-8859-2 «Я не смог вернуть письма к работе.

Функциональность очень проста. Я просто использую HTTP-клиента по умолчанию, встроенный вNode.js для подключения к удаленному хосту с простым запросом get.

Некоторые факты среды:

  • Удаленная система использует кодировку "iso-8859-2".
  • Кодировка в настоящее время установлена ​​в заголовке ответа.
  • Символы не могут быть восстановлены в данных (чанке), полученных response.onData(chunk)

Работает Node.jsверсия 0.2 на сервере Debian по умолчанию.

Код основан на httpClient по умолчанию, как описано в документации по Node.js.

Я попробовал следующее:

response.defaultAsciiEncoding true/false
response.encoding = UFT-8/ascii

Я использовал кодировщик / декодер UTF-8 для кодирования / декодирования фрагмента. После того, как это не удалось, я попытался закодировать / декодировать все тело ответа.

Я не очень знаком с использованием буферов, и я предполагаю, чтопроблема должна быть в том, что дirection.Или Node.js (или httpClient) просто не может обрабатывать другие типы кодирования по умолчанию, и это мое второе предположение.В этом случае мне нужно написать свой собственный HTTP-клиент, используя net lib, я думаю.Я просто хочу убедиться, что я не иду в неправильном направлении:)

Ответы [ 3 ]

0 голосов
/ 12 сентября 2010

Мне кажется, что Node.js не может работать с кодировкой, отличной от UTF-8. Может быть, что-то вроде node-iconv должно работать.

0 голосов
/ 13 сентября 2010

Я быстро осмотрел источник Node.js, и кажется, что svick прав: Node.js не поддерживает кодировку ISO.Однако вы можете получить ответ в виде двоичного потока, а затем либо вернуть его в браузер с собственной кодировкой, либо использовать node-iconv (опять же, как предложил svick).

Вот небольшой пример: http://gist.github.com/576884

0 голосов
/ 11 сентября 2010

Попробуйте установить параметр кодировки в объявлении XML:

<?xml version="1.0" encoding="iso-8859-2" ?>
<xml>
  <!-- whatever -->
</xml>

XML-файлы по умолчанию имеют формат UTF-8, если вы явно не объявите их кодировку.

...