2017-01-24 2 views
0

Этот код загружает образец кодированного файла latin1/ISO-8859-1 и сохраняет его на диск. Откройте этот файл, и вы увидите странные символы знака вопроса . https://stackoverflow.com/a/3527176/779159 объясняет это из-за неправильной кодировки, и latin1 должен ее исправить.Как сохранить файл в NodeJS, используя кодировку символов latin1?

const url = 'http://vancouver-webpages.com/multilingual/french.asis' 
request.get(url, { encoding: null }) 
    .pipe(fs.createWriteStream('/tmp/file.txt', { defaultEncoding: 'latin1' })) 

Но используя request и fs модули, я не могу получить его, чтобы сохранить в latin1 кодировке. Как исправить этот код?

ответ

0

Узел v8.1.4 должен поддерживать latin1 (aka 'binary') в качестве одного из его кодировок для буфера. Я просто проверил ваш код, и на самом деле он работает нормально. Я использую Atom в качестве текстового редактора, и изначально он думал, что это «UTF-8», поэтому появились символы вопросительного знака. Когда я переключился с UTF-8 на «Auto-Detect», все оказалось в порядке. См. Снимок экрана ниже.

Windows 1252 Encoding on Atom

Обратите внимание, как он говорит, «Windows 1252» для кодирования, но она работает так же, как если бы я выбрал «ISO 8859-1». Поэтому убедитесь, что любой редактор, который вы используете, правильно определяет кодировку символов. Это не ошибка Нода!

Кстати, интересная вещь, чтобы отметить, по docs for Node v8.1.4, в одной из секций для буфера:

Современные браузеры следуют WHATWG спецификации, которые псевдонимы как «latin1» и ISO-8859 -1 до win-1252. Это означает, что при выполнении чего-то вроде http.get(), если возвращенная кодировка является одной из перечисленных в WHATWG spec , возможно, что сервер фактически вернул данные, закодированные win-1252, и используя кодировку «latin1» может неправильно декодировать символы.

Смежные вопросы