Javascript 在AngularJS中未正确解码UTF-8字符串
我在基于AngularJS的SPA中有一个文本输入框,用户可以在打印输出中添加标题。输入框声明如下:Javascript 在AngularJS中未正确解码UTF-8字符串,javascript,angularjs,string,utf-8,character-encoding,Javascript,Angularjs,String,Utf 8,Character Encoding,我在基于AngularJS的SPA中有一个文本输入框,用户可以在打印输出中添加标题。输入框声明如下: <input class="chart-title" type="text" ng-model="chartTitle" ng-change="titleChanged()"/> 响应标题: chartTitle: Instrument: %C3%A0%C3%9F%C3%A9%C3%A7%C3%B8%C3%B6 使用AngularJS$http()发出请求。正如您所看到的,这些值
<input class="chart-title" type="text" ng-model="chartTitle" ng-change="titleChanged()"/>
响应标题:
chartTitle: Instrument: %C3%A0%C3%9F%C3%A9%C3%A7%C3%B8%C3%B6
使用AngularJS$http()
发出请求。正如您所看到的,这些值是匹配的(由于明显的原因,请求中的空格编码为%20
)。但是,当我使用标题(“charttitle”)
检索标题时,我收到的值是工具:ÃÃç¸Ã¨
javascript包在索引中用字符集utf-8声明:
<script src="/js/bundle.js" type="text/javascript" charset="UTF-8"></script>
有什么我遗漏的吗?有什么被遗忘的吗
编辑
根据请求提供完整的响应头
围绕标题编码
编辑
api的web.config
也指定了utf-8:
<globalization requestEncoding="utf-8" responseEncoding="utf-8"/>
TL;DR
在文本框中,我想显示“Instrumentáßçøö”,而我看到的是“Instrument: 根据这一消息来源, 您得到的响应是编码的utf-8字符串的实际字符 所以,为了得到结果,你需要对它进行解码 下面是执行此操作的代码
decoded = decodeURIComponent('%C3%A0%C3%9F%C3%A9%C3%A7%C3%B8%C3%B6')
console.log(decoded);
The result is => "àßéçøö"
我们必须这样做才能获得实际字符串,而不是UTF-8
所以,从你的回答中,你得到了,
decodeURIComponent(escape(“escape”)=>“escape”
定义:
decodeURIComponent():
- 表示给定编码的统一资源标识符(URI)组件的解码版本的新字符串
这是你的方法
if (status == 200) {
var original = headers("charttitle");
var chartTitle = decodeURIComponent(escape(original));
console.log(chartTitle);
var printoutInformation = {'chartTitle' : chartTitle, 'pdfData' : data};
deferred.resolve(printoutInformation);
}
现在,您将获得与发送相同的标题。请尝试下面的编码
myAngApp1=document.getElementById(“ItemSearch”);
var uri=myAngApp1.value;
var place=encodeURIComponent(uri)
完整响应头是什么?另外,围绕标题('charttitle')
编写一个简短但完整的代码示例也会有所帮助。@deceze-我已经编辑了这个问题,添加了代码示例和完整的响应标题。responseType:'arraybuffer'
是必需的?@Sravan-是,因为响应是一个pdf格式的数组bytes@deceze-添加了web.config信息,如果这有助于了解答案Sravan。但是,我不想要“%C3%83%20%C3%83%C3%83%C2%A9%C3%83%C2%A7%C3%83%C2%B8%C3%83%C2%B6”。我想要的是原始字符:“乐器:ßßçøö”。有没有办法从一个到另一个?你需要什么样的结果?我需要“工具:工具”。我得到了“Instrument:ÃÃÃÃçøè”@Sravan-我添加了关于web api web.config文件的信息,如果有帮助的话?是的。它没有回答我的问题。
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 Jan 2017 11:19:07 GMT
Server:Microsoft-IIS/10.0
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET
X-SourceFiles:=?UTF-8?B?QzpcR2l0XEVPU1xSZXZpZXdlci5XZWJcYXBpXFByaW50XGQyOTNkNjA4NWVlYzlhNTEwYjQ5YThmZGQxNjNhMjAwMWZhYTFjMGY5YzhiMzUxYzE5ZjYxYWMwYTY1OWVhMDM=?=
$http({
method: 'GET',
url: filePath,
params: {
fileName: fileName
},
responseType: 'arraybuffer',
headers: {'Content-Type' : 'application/json; charset=UTF-8'}
}).success(function (data, status, headers) {
ready();
if (status == 200) {
var chartTitle = headers("charttitle");
var printoutInformation = {'chartTitle' : chartTitle, 'pdfData' : data};
deferred.resolve(printoutInformation);
}
else {
deferred.resolve(null);
}
}).error(function (data) {
ready();
console.log(data);
});
return deferred.promise;
<globalization requestEncoding="utf-8" responseEncoding="utf-8"/>
decoded = decodeURIComponent('%C3%A0%C3%9F%C3%A9%C3%A7%C3%B8%C3%B6')
console.log(decoded);
The result is => "àßéçøö"
if (status == 200) {
var original = headers("charttitle");
var chartTitle = decodeURIComponent(escape(original));
console.log(chartTitle);
var printoutInformation = {'chartTitle' : chartTitle, 'pdfData' : data};
deferred.resolve(printoutInformation);
}