2

我的公司只是将许多列从varchar转换为nvarchar。ASP服务器端代码如何破坏智能报价?

现在看来,当我们向屏幕呈现一个智能报价(即ALT + 0146'),然后将其发送回SQL Server 2000数据库以进行持久化时,智能报价将被破坏为“ - ”。

我的问题:

怎么可能ASP服务器端代码腐败智能报价”?

编辑:看来,我的问题是类似this one。顺便提一下,Powerpoint内容将智能报价引入了混合。不过,正如我之前所说,我正在处理一个ASP页面,而引用的问题与PHP页面有关。

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

回答

0

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 

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

2

它看起来像是做了ANSI和Unicode之间的隐式转换(并在过程中选择了错误的代码页)。您可能需要手动进行转换并提供正确的代码页。没有看到代码很难说。

1

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

在您的HTML,你有这样的东西在你的<头>?

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

你也可以让服务器在你的Response.Headers中明确地发送这个。尽管我认为将它发送到HTTP标头是个不错的主意,但将它包含在HTML中对于决定将文档保存为任何原因的人员也很有帮助。

+0

+1:好点。是的,我*在头节点内部有元标记。但是,我不认为我已经要求服务器在响应头中显式地发送它。是否有我应该看的配置设置? – 2010-06-21 20:54:02

+1

如果您正在执行html方法,则不需要。虽然我认为在IIS中有一个用于站点范围HTTP标头的配置选项,但我认为除非您确定所有页面都处理UTF-8,否则应用它不是个好主意。 – JasonTrue 2010-06-21 21:14:15

+1

%E2%80%99,实际上是智能引擎的UTF-8。你使用参数化查询吗?该参数化查询中的类型是否设置为SQL的NVARCHAR类型?如果您没有使用参数化查询,您是否在SQL中使用了Unicode标记? (例如N'mytext')?最后,在阅读表单值之前,您可能需要设置Request.CodePage = 65001。 – JasonTrue 2010-06-21 21:18:40