【问题标题】:character encoding problem - cross-domain scripting字符编码问题——跨域脚本
【发布时间】:2009-09-23 11:12:01
【问题描述】:

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

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

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

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

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

谢谢 亚龙

【问题讨论】:

    标签: asp.net utf-8 xss character-encoding


    【解决方案1】:

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

    是的。事情是这样的:当您提供<script> 时,您可以将响应的 Content-Type 中的“charset”参数设置为您喜欢的任何内容,但 IE 会忽略您并使用原始页面的编码。 (也许其他一些浏览器也是如此。)

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

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

    【讨论】:

    • 谢谢。你知道一个功能吗?我假设我需要每边一个(JS & C#)
    • 在 JS 端不需要,JS 原生理解 \uxxxx 编码。您需要在 C# 端创建这些编码
    • JS 端可以正常工作,\u-escapes 是 JavaScript 字符串文字的原生部分。我没有调查 .NET 的所有 JSON 实现,但快速浏览一下,LitJSON 似乎确实将非 ASCII 写为转义。 litjson.sourceforge.net
    【解决方案2】:

    您最好向客户明确说明您的界面使用 UTF-8 编码。当他们将您的数据转发给他们的客户时,他们应该将Response.CharSet 设置为 UTF-8。你当然已经在这样做了,对吧?

    【讨论】:

    • 客户端(测试)站点正在使用“windows-1255”并正确显示希伯来字符。我的数据也是希伯来语,但我无法显示它,除非我使用 utf-8 并将其页面编码更改为 utf-8 Firefox 和 Chrome 都运行良好(我正确地看到了数据),但 IE7 坚持页面编码是 utf -8。当我在服务器上获取数据时,我将 Response.Charset 设置为“utf-8”。我假设 IE7 会忽略此设置并使用 html 头部分(元标记)中定义的值。
    • @Yaron:我明白了,我对 JSONP 不太熟悉,Bobince 已经涵盖了这一点。我之前在文件具有不同编码的直接非跨域 javascript 场景中看到过这个 IE 问题。
    猜你喜欢
    • 1970-01-01
    • 2011-02-02
    • 2017-03-31
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    相关资源
    最近更新 更多