Angular http.get charset

时间:2016-08-25 12:49:24

标签: angularjs character-encoding

我在使用角度应用程序正确解析json数据时遇到了一些麻烦。

当我的json-feed包含例如{“title”:“HalldórssonPourié”} 我的申请表明了Halld rssonPouri

我认为问题是字符集,但我无法找到改变它的位置。

目前我正在使用ng-bind-html并使用$ sce.trustAsHtml(),我非常确定当 $ http.get(url)解析我的json时会出现问题。< / p>

那么我如何告诉 $ http.get(url)使用特定的字符集解析数据?

3 个答案:

答案 0 :(得分:1)

重音字符和文本/ JSON字段中的科学符号也存在相同的问题,并且发现AngularJS(或它使用的任何本机JavaScript XHR / fetch函数)都将所有内容压平为UTF-8,无论我们尝试了什么。 / p>

这里的另一位受访者声称,UTF-8应该仍能以某种方式容纳您的扩展字符集,但我们发现并非如此:直接获取源数据的样本,将其加载到具有不同编码的文本编辑器中,而UTF-8仍会将字符扩展到该占位符。

在我们的例子中,编码为ISO-8859-15,但使用ISO-8859-1可能就足够了。

尝试将此$ http配置添加到$ http.get()调用中,相应地:

$http.get(url, {
    responseType: 'arraybuffer',
    transformResponse: function(data) {
        let textDecoder = new TextDecoder('ISO-8859-15'); // your encoding may vary!
        return JSON.parse(textDecoder.decode(data));
    }
});

这应该拦截AngularJS默认响应转换,并在此处应用该函数。当然,您将要考虑添加一些错误处理等。

如果没有自定义的transformResponse函数,如果有更好的方法可以做到这一点,我还没有在AngularJS文档中找到任何东西。

答案 1 :(得分:0)

我遇到了类似的问题,并使用以下方法解决了这个问题:

 encodeURIComponent(JSON.stringify(p_Query))

其中p_Query是包含请求详情的JSON(即您的{ "title": "Halldórsson Pourié" })。

编辑:

您可能还需要在GET请求的标头中添加以下内容:

 'Content-Type': 'application/x-www-form-urlencoded ; charset=UTF-8'

答案 2 :(得分:0)

$http.get(url, {responseType: 'arraybuffer', }).then(function (response) { var textDecoder = new TextDecoder('ISO-8859-1'); console.log(textDecoder.decode(response.data));});
这段代码会将您所有的占位符替换为普通字符。