Angular 4 http.get接收“charset UTF-8”,但将重音字符更改为其ISO代码对应物

时间:2017-10-24 09:18:39

标签: javascript angular encoding utf-8 character-encoding

我第一次遇到这个问题,但在网上找不到任何相关信息。

通过Angular Http API,我查询IIS上托管的SQL Plus服务器,该服务器向我发回一个带有以下标题的json:Content-Type:text/html; charset=utf-8。但在我的应用程序中,收到的重音字符都被转换为他们的html代码对应物:é=> é,è=> è等等。

这是我提出的样本请求:

let URI = '...';
return this._http.get(URI)
    .map(
        response => {
            console.debug(response);
            return data;
        }
    );

从Angular应用程序中进行日志记录时,结果摘录如下:

[
    {
        { 
            i: 0,
            v: "97"
        },
        {
            i: 1,
            v: "éo"
        },
        {
            i: 2,
            v: "2;1"
        },
        {
            i: 3,
            v: "0"
        }
    }
]

但如果我直接使用Chrome,IE和Firefox查询服务器,请在导航栏中粘贴完全相同的网址,结果是正确的:

[
    {
        {
            "i": 0,
            "v": "97"
        },
        {
            "i": 1,
            "v": "é"
        },
        {
            "i": 2,
            "v": "2;1"
        },
        {
            "i": 3,
            "v": "0"
        }
    }
]

两个请求都具有完全相同的标头,所以我只能假设Angular的http API以某种方式改变响应,但我不知道如何纠正这一点。我尝试使用decoreURI和decodeURIComponent方法没有任何成功。

我希望有人已经遇到过这个问题并修复了吗?

编辑:我正在使用Angular 4.3.6和Angular CLI 1.2.1

1 个答案:

答案 0 :(得分:0)

我认为这个问题的答案是:

https://stackoverflow.com/a/43164489/4770754

是一个更好的方法:

发送请求时包括RequestOptionsArgs

RequestOptionsArgs中指定字段responseType : ResponseContentType。 (ResponseContentType.ArrayBufferResponseContentType.Blob

使用TextDecoder或类似的东西来解码结果。

参见文档:

https://angular.io/api/http/Http

https://angular.io/api/http/RequestOptions

https://angular.io/api/http/ResponseContentType

一旦您以正确的编码回复了您的回复,您就可以通过这种方式将其从ISO转换为UTF8:(https://stackoverflow.com/a/5396742/4770754

let utfString = decodeURIComponent(ajaxreturn.replace(/\\x/g,"%"));

但我怀疑到那时你会非常满意在网站上按原样显示它们。

在这种情况下,您可以将整个网站设置为您的编码:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />

:)