小编Dav*_*tty的帖子

在AngularJS中未正确解码UTF-8字符串

我在一个基于AngularJS构建的SPA中有一个文本输入框,供用户在打印输出中添加标题.输入框声明如下:

<input class="chart-title" type="text" ng-model="chartTitle" ng-change="titleChanged()"/>
Run Code Online (Sandbox Code Playgroud)

文本框中填充了服务器提供的默认标题.用户可以将标题更改为适合他们的标题.更改标题后,服务器将更新并在响应标题中发回新标题,然后替换框中的标题.这适用于标准ASCII类型字符.

但是,对于unicode字符(例如àßéçøö),它不起作用.文本正确发送,在服务器上正确更新,并正确返回到SPA.请求/响应的标头位于:

Request URL:http://blahblahblah/api/.....&chartTitle=Instrument:%20%C3%A0%C3%9F%C3%A9%C3%A7%C3%B8%C3%B6
Run Code Online (Sandbox Code Playgroud)

响应标题:

chartTitle: Instrument: %C3%A0%C3%9F%C3%A9%C3%A7%C3%B8%C3%B6
Run Code Online (Sandbox Code Playgroud)

该请求是使用AngularJS进行的$http().正如您所看到的那样,值匹配(请求中的空格代码出于%20显而易见的原因).但是,当我检索标题时,使用headers("charttitle"),我收到的值是Instrument: àÃéçøö

使用charset utf-8在索引中声明javascript包:

<script src="/js/bundle.js" type="text/javascript" charset="UTF-8"></script>
Run Code Online (Sandbox Code Playgroud)

另外html是用正确的字符集声明的,在我看来头部声明中的两个地方:

<meta http-equiv="Content-Type" content="text/html charset=UTF-8" />
<meta charset="utf-8" />
Run Code Online (Sandbox Code Playgroud)

根据这个网站(http://www.i18nqa.com/debug/utf8-debug.html),我似乎得到了Windows1252字符编码.这没有任何意义.如果绝对必要,我可以写一个可怕的黑客将utf-8字符串转换为Windows1252字符,但这似乎有点极端,而且非常容易出错.

无论是在Chrome,Firefox还是IE11上,效果都是一样的.完整的请求标题位于:

Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Connection:keep-alive
Host:blahblahblah
Origin:http://blahblahblah
Referer:http://blahblahblah/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Run Code Online (Sandbox Code Playgroud)

有什么我遗漏的吗?有什么东西被遗忘了吗?

编辑

请求的完整响应标头.

Access-Control-Allow-Origin:*
Access-Control-Expose-Headers:chartTitle
Cache-Control:private
chartTitle:Instrument: %C3%A0%C3%9F%C3%A9%C3%A7%C3%B8%C3%B6
Content-Disposition:attachment; filename=PrintData.pdf
Content-Length:1391643
Content-Type:application/octet-stream
Date:Fri, 20 …
Run Code Online (Sandbox Code Playgroud)

javascript string utf-8 character-encoding angularjs

12
推荐指数
1
解决办法
1万
查看次数