Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在AngularJS中未正确解码UTF-8字符串_Javascript_Angularjs_String_Utf 8_Character Encoding - Fatal编程技术网

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

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()发出请求。正如您所看到的,这些值

我在基于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()
发出请求。正如您所看到的,这些值是匹配的(由于明显的原因,请求中的空格编码为
%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);
}