【问题标题】:Database content in UTF-8 but show in ISO-8859-1 webpageUTF-8 格式的数据库内容,但显示在 ISO-8859-1 网页中
【发布时间】:2012-04-10 03:37:20
【问题描述】:

以前我的网页使用字符集 UTF-8,它用这个字符集将很多内容插入到我的 SQL Server 2008 数据库中。

现在我的网页使用字符集 ISO-8859-1。但它仍然使用数据库中的相同内容。现在我的问题是,数据库中的内容是旧字符集。

有没有办法将数据库中的所有内容从一个字符集转换为另一个字符集?一个通用,还是使用连接字符串?

【问题讨论】:

  • 我很好奇您为什么要将 utf-8 切换到 ISO 编码?通常情况正好相反。 Utf-8 可以表示 ISO 可以表示的每个 Unicode 代码点。全世界都在努力摆脱 ISO 和其他 Ansi 编码并拥抱 Unicode。
  • 我走哪条路并不重要。我只需要知道是否有办法做到这一点......
  • 假设您将 UTF-8 数据存储在 char/varchar/text 列中,您必须使用 UTF-8 排序规则以 Unicode 格式读取数据以进行正确转换。然后,您必须自己更新您的 ASP 代码以将该 Unicode 数据转换为 ISO,然后再将其发送到客户端。所以切换到 ISO 是没有意义的,数据是 UTF-8 所以把它作为 UTF-8 发送给客户端。将来,将您的数据库设计为使用nchar/nvarchar 以避免出现外来文本问题。
  • 我实际上将它存储为varchar/text。未来的设计应有尽有,谢谢!通过设置response.codepage 解决了整个问题 :) 但是感谢 nvarchar/ntext-point :)

标签: sql-server-2008 asp-classic utf-8 character-encoding iso-8859-1


【解决方案1】:

首先,您可能已经在数据库中使用了 NVARCHAR 或 NTEXT 字段。因此字段的内容被编码为Unicode。

最好假设您使用 UTF-8 编码发布的原始投递表单和您的接收页面的 Response.Codepage 设置为 65001,这样传入的字符串就可以保真地存储在数据库中。

如果上述情况成立,那么使用新字符集将内容发送到客户端将是正确设置页面代码页的简单问题,对于 ISO-8869-1,我们使用代码页 1252。将代码页设置为1252 使用Response.Write 发送的任何数据都将从本机Unicode 转换为1252 代码页。

但是,您也很可能已经将损坏的数据存储在 DB 中,但在 HTML 中看起来一切正常。请参阅我对一个较旧问题的回答here,以了解有关情况的详细信息。同样的答案包含修复数据库中数据所需的步骤。之后设置输出代码页就足够了。

请注意,ASP 文件本身应保存为 Windows-1252 而不是 UTF-8,否则客户端将错误地接受文件中的任何非 ASCII 静态内容。

【讨论】:

  • 我没有使用nvarchar/ntext。我现在做的。 - 我没有灌浆 response.codepageresponse.charset。我现在这样做了,这解决了一切! :) 再次感谢您的帮助安东尼。像往常一样,我学到了很多东西:)
猜你喜欢
  • 2015-12-30
  • 2017-12-15
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
相关资源
最近更新 更多