我在使用角度应用程序正确解析json数据时遇到了一些麻烦。
当我的json-feed包含例如{“title”:“HalldórssonPourié”} 我的申请表明了Halld rssonPouri
我认为问题是字符集,但我无法找到改变它的位置。
目前我正在使用ng-bind-html并使用$ sce.trustAsHtml(),我非常确定当 $ http.get(url)解析我的json时会出现问题。< / p>
那么我如何告诉 $ http.get(url)使用特定的字符集解析数据?
答案 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));});
这段代码会将您所有的占位符替换为普通字符。