Sql server 2008 UTF-8中的数据库内容,但在ISO-8859-1网页中显示

Sql server 2008 UTF-8中的数据库内容,但在ISO-8859-1网页中显示,sql-server-2008,asp-classic,utf-8,character-encoding,iso-8859-1,Sql Server 2008,Asp Classic,Utf 8,Character Encoding,Iso 8859 1,以前,我的网页使用字符集UTF-8,它使用该字符集向我的SQL Server 2008数据库插入了大量内容 现在我的网页正在使用字符集ISO-8859-1。但它仍然使用来自数据库的相同内容。现在我的问题是,数据库中的内容使用旧的字符集 有没有办法将数据库中的所有内容从一个字符集转换为另一个字符集?一对一,或者使用连接字符串?首先,您可能已经在数据库中使用了NVARCHAR或NTEXT字段。因此,字段的内容被编码为Unicode 假设您的原始投递表单使用UTF-8编码投递,并且您的接收页面的Res

以前,我的网页使用字符集UTF-8,它使用该字符集向我的SQL Server 2008数据库插入了大量内容

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


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

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

假设您的原始投递表单使用UTF-8编码投递,并且您的接收页面的Response.Codepage设置为65001,这样传入的字符串将以保真度存储在数据库中

如果上述情况属实,那么使用新的字符集将内容发送到客户端,只需正确设置页面代码页即可,对于ISO-8869-1,我们使用代码页1252。当代码页设置为1252时,使用
Response.Write
发送的任何数据都将从本机Unicode转换为1252代码页

然而,您也很可能在数据库中存储了损坏的数据,但在HTML中看起来一切正常。请参阅我对一个旧问题的回答,以了解这可能是怎样的。这个答案包含修复数据库中数据所需的步骤。设置之后,输出代码页应该足够了


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

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

假设您的原始投递表单使用UTF-8编码投递,并且您的接收页面的Response.Codepage设置为65001,这样传入的字符串将以保真度存储在数据库中

如果上述情况属实,那么使用新的字符集将内容发送到客户端,只需正确设置页面代码页即可,对于ISO-8869-1,我们使用代码页1252。当代码页设置为1252时,使用
Response.Write
发送的任何数据都将从本机Unicode转换为1252代码页

然而,您也很可能在数据库中存储了损坏的数据,但在HTML中看起来一切正常。请参阅我对一个旧问题的回答,以了解这可能是怎样的。这个答案包含修复数据库中数据所需的步骤。设置之后,输出代码页应该足够了


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

我很好奇为什么您会从UTF-8切换到ISO编码?通常情况下是相反的。Utf-8可以表示ISO可以表示的每个Unicode代码点。全世界都在试图摆脱ISO和其他Ansi编码,转而接受Unicode。我选择哪种方式并不重要。我只需要知道是否有办法做到这一点……假设您将UTF-8数据存储在
char/varchar/text
列中,则必须使用UTF-8排序规则以Unicode格式读取数据,以便进行适当的转换。然后,在将Unicode数据发送到客户端之前,您必须更新ASP代码以将其转换为ISO。因此,切换到ISO是没有意义的,数据是UTF-8,所以将其作为UTF-8发送到客户端。将来,将数据库设计为使用
nchar/nvarchar
以避免外来文本的问题。实际上,我将其存储为
varchar/text
。未来的设计非常重要,谢谢!通过设置
response.codepage
整个问题都解决了:)但是感谢nvarchar/ntext点:)我很好奇为什么您要从utf-8切换到ISO编码?通常情况下是相反的。Utf-8可以表示ISO可以表示的每个Unicode代码点。全世界都在试图摆脱ISO和其他Ansi编码,转而接受Unicode。我选择哪种方式并不重要。我只需要知道是否有办法做到这一点……假设您将UTF-8数据存储在
char/varchar/text
列中,则必须使用UTF-8排序规则以Unicode格式读取数据,以便进行适当的转换。然后,在将Unicode数据发送到客户端之前,您必须更新ASP代码以将其转换为ISO。因此,切换到ISO是没有意义的,数据是UTF-8,所以将其作为UTF-8发送到客户端。将来,将数据库设计为使用
nchar/nvarchar
以避免外来文本的问题。实际上,我将其存储为
varchar/text
。未来的设计非常重要,谢谢!通过设置
response.codepage
整个问题都解决了:)但是感谢nvarchar/ntext点:)我没有使用
nvarchar/ntext
。我现在知道了我没有pud
response.codepage
response.charset
。我现在知道了,这解决了所有问题!:)再次感谢你的帮助,安东尼。像往常一样,我学到了很多:)我没有使用
nvarchar/ntext
。我现在知道了我没有pud
response.codepage
response.charset
。我现在知道了,这解决了所有问题!:)再次感谢你的帮助,安东尼。和往常一样,我学到了很多:)