2009-09-23 42 views
2

我有一个Asp.Net Web应用程序哪些用户包括脚本标签在他们的网页,并 从我的服务器(使用JSONP &通用处理器(ASHX))获取数据字符编码问题 - 跨域脚本

数据以希伯来语编写,我在响应中将字符集设置为utf-8。

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

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

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

感谢 亚龙

回答

3

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

是的。这是事情:当你服务于<script>时,你可以在响应的Content-Type中设置'charset'参数为你喜欢的任何东西,但IE会忽略你并使用源页面的编码。 (也许还有其他一些浏览器。)

所以,如果您在使用JSONP或其他基于脚本标记的方式来提取数据,那么该数据必须与原始页面或纯ASCII使用相同的编码。如果您为可能不同编码的许多网页提供外部服务,则必须坚持使用ASCII。

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

+0

谢谢。 你知道这个功能吗? 我假设我需要在每一边(JS&C#) – Yaron 2009-09-23 13:23:44

+0

你不需要在JS端,JS本身理解\ uxxxx编码。你需要C#端的东西来创建这些编码 – AnthonyWJones 2009-09-23 14:19:40

+0

JS端只会工作,'\ u'-escapes是JavaScript字符串文本的本地部分。我还没有对.NET的所有JSON实现进行调查,但快速浏览一下,LitJSON似乎将非ASCII编写为转义。 http://litjson.sourceforge.net/ – bobince 2009-09-23 14:23:56

1

它可能会更好,你清楚地说明你的客户,你的界面使用UTF-8编码。当他们将数据转发给客户时,他们应该将Response.CharSet设置为UTF-8。当然,你正在为了你的目的而做这件事吗?

+0

客户端(测试)站点正在使用“windows-1255”并正确显示希伯来字符。 我的数据也是用希伯来语,但我不能显示它,除非我使用utf-8并将其页面编码更改为utf-8 Firefox和Chrome都能正常工作(我正确地看到数据),但IE7坚持认为页面编码是utf-8。 当我在我的服务器上获取我的数据时,我将Response.Charset设置为“utf-8”。 我假设IE7忽略了这个设置,并使用html头部分(meta标签)中定义的值。 – Yaron 2009-09-23 12:23:01

+0

@Yaron:我明白了,我对JSONP并不熟悉,Bobince有这方面的内容。我之前在直接转发的非跨域javascript场景中看到过这个IE问题,其中文件的编码方式不同。 – AnthonyWJones 2009-09-23 14:18:02