如何使用Express发送Windows-1255编码的文件?

时间:2018-10-10 08:27:53

标签: javascript node.js express character-encoding iconv

我正在编写一个创建文本文件的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 :(得分:0)

您的代码正确。

看到乱码的原因与Windows设置有关。

Windows-1255是旧标准。这些天,我们使用UTF(Unicode)。 与其他Windows代码页一样,Windows-1255是8位SBCS。

前127个值是ASCII兼容的。其他的基于编码具有不同的含义。希伯来语编码赋予它们希伯来语含义,日语给它们赋予日语含义,依此类推... 没有足够的位数来表示各种各样的符号。

如果转到Windows设置并定义如何处理非unicode编码,它将更改,这意味着前127个数字所占的比例。 将其设置为希伯来语,您的内容将不再显示乱码。

进一步阅读:Joel on Software - The absolute minimum every software developer absolutely positively must know about unicode and character sets, no excuses.