1

以前我的网页使用了字符集UTF-8,并且使用该字符集将大量内容插入到SQL Server 2008数据库中。UTF-8中的数据库内容但在ISO-8859-1网页中显示

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

有没有办法将数据库中的所有内容从一个字符集转换为另一个字符集?一个人或连接字符串?

+0

我很好奇为什么你会从** utf-8 **切换到** ISO编码?通常情况是相反的。 Utf-8可以表示ISO可以识别的每个Unicode码点。世界正试图摆脱ISO和其他Ansi编码并拥抱Unicode。 – 2012-03-27 08:53:28

+0

我会走哪条路并不重要。我只需要知道是否有办法做到这一点...... – Behrens 2012-03-27 09:53:16

+1

假设您将UTF-8数据存储在char/varchar/text列中,则必须使用UTF-8归类以Unicode格式读取数据以允许正确的转换。然后,您必须更新您的ASP代码才能将该数据转换为ISO,然后再将其发送到客户端。所以切换到ISO是没有意义的,数据是UTF-8,所以将它作为UTF-8发送到客户端。将来,设计你的数据库使用'nchar/nvarchar'来避免外来文本的问题。 – 2012-03-27 19:23:23

回答

1

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

假设您的原始发布表单使用UTF-8编码发布并且您的接收页面将其Response.Codepage设置为65001,以便传入的字符串以保真度存储在数据库中将会很好。

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

但是,您也很有可能将损坏的数据存储在数据库中,但它在HTML中看起来都很好。请参阅我的回答here以了解更详细的问题。同样的答案包含了修复数据库中数据的步骤。在那之后,输出代码页应该足够了。

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

+0

我没有使用'nvarchar/ntext'。我现在做的。 - 我没有pud'response.codepage'和'response.charset'。我现在就做,这解决了一切! :)再次感谢您的帮助安东尼。像往常一样,我学习了很多:) – Behrens 2012-03-28 09:47:03

相关问题