Json   发布时间:2022-04-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了.net – 带有加扰非ASCII字符的JSONP字符串大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在C#4.0中有一个小型Web服务,它通过 JSONP返回数据.我遇到的问题是,非ASCII字符 – 如德语变音符号(ä,ö,ü) – 在到达客户端时会被扰乱.以下简化代码说明了这一点:

// ThE interface
[OperationContract]
[WebGet( ResponseFormat = Webmessageformat.Json )]
String GetTestString();

//...

// The implementation
public String GetTestString()
{
    return "String with some GeRMAN characters: äöüß";
}

现在,如果我通过输入URL http:// localhost:31843 / TestWebservice / GetTestString通过Firefox访问Web方法,我会得到正确的结果:

"String with some GeRMAN characters: äöüß"

但是,如果我在URL中指定了回调参数(http:// localhost:31843 / TestWebservice / GetTestString?callBACk = Test),这就是JSONP所做的,我得到了一个混乱的结果:

Test("String with some GeRMAN characters: äöüß");

JSONP序列化程序是我通过设置webhttpBinding.CrossDomainScriptAccessEnabled = true激活的Microsoft .NET 4.0框架的序列化程序;在我的代码中.
没有找到任何方法来影响该序列化程序的字符编码.你有什么想法?

一个提示:在带有加扰字符的JSONP字符串的Web请求之后,Firebug在控制台上显示以下错误

“未声明纯文本文档的字符编码.如果文档包含US-ASCII范围之外的字符,则文档将在某些浏览器配置中使用乱码文本呈现.文件的字符编码需要在传输中声明协议或文件需要使用字节顺序标记作为编码签名.“

显然这似乎是问题所在.但问题是,如何配置正确的编码(为什么@L_450_15@认情况下不是UTF8)?

更新:

我认为Microsoft .NET DataContractJsonserializer有一个错误.在使用JSON的第一种情况下,它发送以下http标头:

Content-Type: application/json; charset=utf-8

通过指定回调URL参数使用JSONP时,它会发送:

Content-Type: application/x-javascript

因此,不指定字符编码,将字符集的决定留给浏览器.在互联网上进行一些研究后,我确信没有(简单)方法强制DataContractJsonserializer发送带有正确字符集的Content-Type http标头.

解决方法

我现在已经找到了一个非常简单的解决方案 – 可能有点人为 – 问题.

说明:我正在开发一个带有JavaScript框架的智能手机应用程序,因此它不是原生应用程序,而是在智能手机的浏览器引擎中运行.因此,所有Web内容(HTML,JavaScript,CSS文件等)都在本地加载,而不是从Web服务器远程加载.这就是为什么没有适当的带有字符集的Content-Type http标头,因为根本没有http.在index.html文件中,它是应用程序的主页面(唯一的),也没有指定charset.所以浏览器假设了一些@L_450_15@认字符集,遗憾的是不是UTF-8.

所以对我来说简单的解决方案是通过添加以下行来指定index.html中的字符集:

<Meta http-equiv="Content-Type" content="text/html; charset=utf-8">

这样,嵌入式JSONP数据现在也可以正确显示,而不需要JSONP http响应显式指定其字符集.

当然,这不能解决Firefox中不正确的显示问题,如上面的问题所述.但这并不重要,因为它只需要在智能手机的浏览器上正确显示.

大佬总结

以上是大佬教程为你收集整理的.net – 带有加扰非ASCII字符的JSONP字符串全部内容,希望文章能够帮你解决.net – 带有加扰非ASCII字符的JSONP字符串所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。