Как отправить файл в кодировке Windows-1255 с помощью Express? - PullRequest
0 голосов
/ 10 октября 2018

Я пишу API, который создает текстовые файлы.Он используется устаревшим программным обеспечением, для которого требуются файлы с кодировкой Windows 1255 .Я создаю содержимое файла из старой доброй строки JavaScript.

Это соответствующие части кода, которые у меня есть:

var iconv = require('iconv-lite');
const str = 'Hello world, שלום עולם';
const encoded_str = iconv.encode(str, 'win1255', {addBOM: true});
response.status(200).send('data:text/plain;base64,' + Buffer.from(str, 'binary').toString('base64'));

Он успешно отправляет текстовый файл,Содержимое ASCII сохраняется и хорошо отображается, когда я открываю его в блокноте, но любые не ASCII (думаю: иврит) символы искажены.

У меня есть ощущение, что это как-то связано с преобразованием base64,(файл позже открывается с использованием тега HTML <a href="...">)

1 Ответ

0 голосов
/ 10 октября 2018

Ваш код верен.

Причина, по которой вы видите искаженные символы, больше связана с настройками Windows.

Windows-1255 - это старый стандарт.В эти дни мы используем UTF (Unicode).Windows-1255, как и другие кодовые страницы Windows, является 8-битной SBCS.

Первые 127 значений совместимы с ASCII.Другие имеют другое значение в зависимости от кодировки.Кодировки на иврите дают им значения на иврите, японцы дают им значения на японском и т. Д. ... Недостаточно битов для представления большого разнообразия символов.

Если вы переходите к настройкам Windows и определяете, как обращаться с не- Unicode-кодировки, это изменит значение, которое принимают верхние 127 чисел.Перейдите и установите его на иврит, и ваш контент больше не будет искажен.

Дополнительная информация: Джоэл о программном обеспечении - абсолютный минимум, который каждый разработчик программного обеспечения должен абсолютно точно знать о юникоде и наборах символов, нетотговорки.

...