CSV 文件在 postman 和 angular http 请求中出现 non-English 个字符错误

CSV file with non-English characters error in postman and angular http request

我上传了一个包含一些德语单词的 CSV 文件。我可以通过 this link 访问该文件。当我尝试通过邮递员获取文件时,响应未完全转换为 utf。

下载文件后,我用excel或记事本++打开文件,我得到了预期的结果。

我再次尝试通过 angular HttpClient 获取文件。我在 Chrome 的网络预览部分收到此回复。

但是当我console.log响应时,现在响应不正确。

我尝试通过邮递员调用添加 Accept: application/csvAccept-Charset: UTF-8 header,但得到相同的结果。

我用angular做了一个stackblitz sample

您可以将“responseType”更改为“arraybuffer”,然后使用您需要的任何编码对数组进行解码。在这种情况下 iso-8859-2

看看 example.

由于一个字节只能有256个不同的值,而世界上所有语言的集合都超过256个字符,UTF-8需要用多个字节来表示一些字符。通常,像单词“bênção”这样的重音字符在 UTF-8 中表示为 2 个字节(而在 ISO 8859-1 中仅表示为 1 个字节):

             b |    ê   |  n |    ç   |    ã   |  o
ISO 8859-1: 62 |   EA   | 6E |   E7   |   E3   | 6F
     UTF-8: 62 | C3  AA | 6E | C3  A7 | C3  A3 | 6F

当您尝试阅读以一种编码编写的文本时,就好像它是另一种编码一样,这是一个问题:如果文本以 UTF-8 编写但以 ISO 8859-1 读取,它显示为“bênçà £o”;相反的显示为“b�n��o”

JavaScript中的示例:

var bytesUtf8 = new Uint8Array([0x62, 0xc3, 0xaa, 0x6e, 0xc3, 0xa7, 0xc3, 0xa3, 0x6f]);
var bytesIso = new Uint8Array([0x62, 0xea, 0x6e, 0xe7, 0xe3, 0x6f]);
var decIso = new TextDecoder("iso-8859-1")
var decUtf8 = new TextDecoder("utf-8")
var decBytesIsoCorrect = decIso.decode(bytesIso)
var decBytesUtf8Correct = decUtf8.decode(bytesUtf8)
var decBytesIsoInUtf8 = decUtf8.decode(bytesIso)
var decBytesUtf8InIso = decIso.decode(bytesUtf8)
console.log('iso > iso', decBytesIsoCorrect)
console.log('utf-8 > utf-8', decBytesUtf8Correct)
console.log('iso > utf-8', decBytesIsoInUtf8)
console.log('utf-8 > iso', decBytesUtf8InIso)

注:可以使用iso-8859-n