Asp.net 字符编码问题-跨域脚本

Asp.net 字符编码问题-跨域脚本,asp.net,utf-8,xss,character-encoding,Asp.net,Utf 8,Xss,Character Encoding,我有一个Asp.Net web应用程序,用户在其网页中包含一个脚本标记,并且 从我的服务器获取数据(使用JsonP&a通用处理程序(ashx)) 数据是希伯来语的,我在响应中将字符集设置为utf-8 当客户端网站(显示数据)使用“windows-1255”时 我看不清楚课文 脚本可以包含在具有任何字符集的任何网页中 我是否需要转换数据或以不同方式设置响应字符集属性 谢谢 Yaron您最好向客户明确指定您的接口使用UTF-8编码。当他们将您的数据转发给他们的客户机时,他们应该将Response.C

我有一个Asp.Net web应用程序,用户在其网页中包含一个脚本标记,并且 从我的服务器获取数据(使用JsonP&a通用处理程序(ashx))

数据是希伯来语的,我在响应中将字符集设置为utf-8

当客户端网站(显示数据)使用“windows-1255”时 我看不清楚课文

脚本可以包含在具有任何字符集的任何网页中

我是否需要转换数据或以不同方式设置响应字符集属性

谢谢
Yaron

您最好向客户明确指定您的接口使用UTF-8编码。当他们将您的数据转发给他们的客户机时,他们应该将
Response.CharSet
设置为UTF-8。你当然已经准备好了,对吧

当客户端网站(显示数据)使用“windows-1255”时,我看不到正确的文本

嗯。事情是这样的:当您提供
服务时,您可以将响应内容类型中的“charset”参数设置为任何您喜欢的参数,但是IE将忽略您,而使用原始页面的编码。(可能还有其他浏览器。)

因此,如果您正在使用JSONP或其他基于脚本标记的方法来拉入数据,那么该数据必须与原始页面采用相同的编码,或者使用普通ASCII。如果您为许多可能采用不同编码的网页提供外部服务,则必须坚持使用ASCII


这意味着您的JSON编码器必须将字符串文本中的所有非ASCII字符转换为JS转义形式,例如
\u20AC
,而不是原始的€。

客户端(测试)站点正在使用“windows-1255”,并正确显示希伯来文字符。我的数据也是希伯来语的,但我不能显示它,除非我使用utf-8并将其页面编码更改为utf-8 Firefox和Chrome都能正常工作(我正确地看到数据),但IE7坚持页面编码为utf-8。当我在服务器上获取数据时,我将Response.Charset设置为“utf-8”。我假设IE7忽略了这个设置,并使用在html头部部分(meta标记)中定义的值。@Yaron:我明白了,我对JSONP不太熟悉,Bobince已经介绍了这一点。我以前在直接的非跨域javascript场景中见过这个IE问题,其中文件的编码不同。谢谢。你知道一个函数能做到这一点吗?我假设我需要在每一面都有一个(JS&C#)。在JS方面,JS本机理解\uxxx编码,而您不需要。在C端需要一些东西来创建这些编码。JS端可以正常工作,
\u
-转义是JavaScript字符串文本的本机部分。我还没有调查过.NET的所有JSON实现,但简单地看一下,LitJSON似乎确实将非ASCII写为转义。