【问题标题】:Unicode when upgrade to IIS 7升级到 IIS 7 时的 Unicode
【发布时间】:2014-04-17 14:24:56
【问题描述】:

我有一个使用 SQL server 2000 由 asp 编写的网站。它在 IIS 5 中很好(在 Windows Server 2000 系统上),所有越南语字符(使用 unicode utf-8)都可以正确显示。 但是当我在 IIS 7 Web 服务器(Windows Server 2008)上部署我的网站时,之前的数据库连接仍然连接到数据库。但越南语字符显示不正确。 SQL 服务器使用 SQL_Latin1_General_CP1_CI_AS 排序规则。 我应该怎么做才能解决我的问题? 感谢您的任何建议。

【问题讨论】:

  • Hanselman 写了一些关于经典 asp 和 utf-8 的非常有用的东西:hanselman.com/blog/InternationalizationAndClassicASP.aspx 此外,Spolsky 写了这篇必读的东西:joelonsoftware.com/articles/Unicode.html
  • @ulluoink:感谢您的回复,但我的麻烦是该网站是我客户的,而不是我的。他们是 6 年前开发的,而不是现在,所有数据都保存到 SQL Server 中。我需要一个解决方案来在 IIS 7 中显示保存的数据。
  • 你能不能编辑asp页面? - Hanselman 博客中描述的Response.CodePage = 65001 通常是解决经典 ASP 中字符编码问题的关键
  • 源 ASP 页面也需要保存为 UTF-8 而不是 ASCII 并且不要忘记 ASP 页面顶部的 <% @CodePage="65001" %> 处理指令。
  • 老实说,这个问题在这个网站上一遍又一遍地被问到,只是看看......All you need to know to support UTF-8 in Classic ASP 在经典 ASP 中,有很多不匹配的误解信息。

标签: sql-server iis unicode asp-classic


【解决方案1】:

以下是我用来确保 2008 年经典 ASP 输出 UTF8 的技术。

在您输出任何 HTML 之前,请在您的 ASP 中包含以下内容。我把它放在我最初的 Option Explicit 和 Response.Buffer 之后:

<%
Session.CodePage = 65001 ' UTF8
Session.LCID     = 1066  ' assuming your LCID will be 1066 = Vietnam. Mine is 1033.
Response.CharSet = "UTF-8"
%>

对于 HTML 部分,假设您有一个较旧的站点,因此它可能是 XHTML,请在 doctype 声明之前从这里开始:

<?xml version="1.0" encoding="UTF-8"?>

在 HTML 的 head 标签内,包含以下内容:

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

此外,您的所有 ASP/HTML 页面都应使用编辑器保存,该编辑器可让您使用 UTF8 编码与 ANSI 编码进行保存。

db端记得使用nchar、nvarchar、ntext等

【讨论】:

  • 您也可以在您的 ASP 中使用 Response.AddHeader "Content-Type", "text/html;charset=UTF-8" 但据我了解,Response.CharSet 设置应该已经涵盖了您。
  • 你说得对@Neil,实际上不需要meta html标签(尤其是MS特定的......天哪)或Session.LCID要么只使用Response.CodePage = 65001(或会话等效)和Response.Charset = "UTF-8" 令人惊讶的是有多少人犯了这个错误。
  • 感谢您确认 Lankymart 和非常有用的反馈。赞赏。 :) 我在几年前的某个时候需要 MS.LOCALE,所以将它保留在我的列表中。可能是早期版本 IE 的黑暗时代遗留下来的。我希望大多数网站都发布 IE6,所以那里非常好。应该把它拿出来。重新“额外”的 HTML 标签,为了保持一致性,仍然值得列出它们恕我直言,因为您有时会看到根本不使用任何 ASP 的“纯 HTML”页面,特别是在旧网站上。
  • 这是很有价值的一点,如果您有静态 HTML 页面,那么肯定会包含元标记。
  • 谢谢你,尼尔·克雷斯韦尔。我会尝试并反馈。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 2015-10-29
  • 2019-02-08
  • 2021-08-28
  • 1970-01-01
相关资源
最近更新 更多