【问题标题】:How could ASP server-side code corrupt a smart quote ’?ASP 服务器端代码怎么会破坏智能引号?
【发布时间】:2011-03-06 11:33:08
【问题描述】:

我的公司刚刚将许多列从 varchar 转换为 nvarchar。

现在看来,当我们将智能引号(即 ALT+0146 ')渲染到屏幕上,然后将其发送回 SQL Server 2000 数据库进行持久化时,智能引号会损坏为 - ’ -。

我的问题:

ASP 服务器端代码如何破坏智能引号?

编辑:看来我的问题类似于this one。顺便说一句,Powerpoint 内容将智能引用引入了组合中。然而,正如我之前所说,我正在处理一个 ASP 页面,而引用的问题与 PHP 页面有关。

编辑:服务器端指令CODEPAGE=65001 使页面呈现正确,但它仍然发布内容为“西欧”在 Windows 2000 机器上。有谁知道为什么?

【问题讨论】:

    标签: asp-classic vbscript iis-5 windows-server-2000 smart-quotes


    【解决方案1】:

    看起来有些东西正在 ANSI 和 Unicode 之间进行隐式转换(并且在此过程中选择了错误的代码页)。您可能需要手动进行转换并提供正确的代码页。不看代码很难说。

    【讨论】:

      【解决方案2】:

      看看这个:

      http://support.microsoft.com/kb/232580

      您可能希望在 ASP 中设置您的代码页,这样您就不会得到虚假字符。

      【讨论】:

        【解决方案3】:

        虽然您确实需要告诉服务器要使用哪种编码,但您是否告诉客户端页面编码是什么?如果不是这样,客户端会很乐意使用用户最后明确选择的任何编码或系统默认编码(在大多数美国或西欧机器上可能是西欧)发布。

        在您的 html 中,您的

        中是否有类似的内容?
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        

        您也可以要求服务器在您的 Response.Headers 中明确发送。虽然我认为将它发送到 HTTP 标头中是个好主意,但将它包含在 HTML 中也对那些出于任何原因决定将文档保存在本地的人很有帮助。

        【讨论】:

        • +1:好点。是的,我 确实 在标题节点内有那个元标记。但是,我认为我没有要求服务器在响应标头中明确发送。是否有我应该查看的配置设置?
        • 如果您使用 html 方法,则不需要。虽然我认为 IIS 中有一个用于站点范围 HTTP 标头的配置选项,但我认为应用它不是一个好主意,除非您确定所有页面都在处理 UTF-8。
        • %E2%80%99 实际上是用于智能引用的 UTF-8。您是否使用参数化查询?该参数化查询的类型是否设置为 SQL 的 NVARCHAR 类型?如果您没有使用参数化查询,您是否在 SQL 中使用了 Unicode 标记? (例如 N'mytext')?最后,您可能需要在读取表单值之前设置 Request.CodePage=65001。
        • msdn.microsoft.com/en-us/library/ms524967(VS.90).aspx 也是一个检查的好地方。 (不记得老式的 asp 是否支持 Request.CodePage;如果不支持,请尝试 Session.CodePage)。
        【解决方案4】:

        VBScript 可能会破坏 Unicode 字符;特别是在旧版本的 IIS 上(即 Windows Server 2000 上的 IIS 5.0)。

        就我而言,应该归咎于 For Each 构造。

        下面是一些在 POST 之后执行的示例代码:

        Response.Write Request.Form("selOptions")(0) ' A-OK! - Displays Unicode characters fine!  
        For Each sOption in Request.Form("selOptions")
          Response.Write sOption ' Bad! Unicode characters are mangled!  
        Next
        

        与往常一样,您的里程可能会有所不同。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-03-26
          • 1970-01-01
          • 2013-08-28
          • 1970-01-01
          • 1970-01-01
          • 2016-04-22
          • 1970-01-01
          相关资源
          最近更新 更多