由于编码问题修复不良字符

时间:2010-05-27 15:31:36

标签: c# sql sql-server encoding utf-8

最近我们的系统出现了编码问题:

如果我们的数据库中有字符串“æ”,则在我们的网页上变为“Ô。

现在这个问题已经解决,但问题是现在我们的数据库中有很多“Ã|”:用户没有看到并验证带有这些字符的预填表单。

我发现如果你在utf 8 C3A6中读到你会得到“æ”,如果你在ascii中读到它,你会得到“Ô。

这很奇怪,因为如果我执行

"select convert(varbinary(40),N'æ'),convert(varbinary(40),'æ')"

我没有相同的结果......

您对我如何修复数据库有任何想法(即将所有“Ã|”更改为“æ”)?

THX

2 个答案:

答案 0 :(得分:1)

据我所知,唯一需要修复的方法是使用替换:

Update Table
Set Column = Replace(Column, N'æ', N'æ')

在这种情况下,我假设该列现在是Unicode(即nvarchar或nchar)。

答案 1 :(得分:0)

  

如果你在ascii中读到它,你会得到“Ã|”。

ASCII仅将字符分配给字节00-7F。然而,有几个“扩展ASCII”编码,其中C3 A6代表“Ã|”,包括流行的西欧编码ISO-8859-1和windows-1252,以及土耳其ISO-8859-9和windows-1254。 / p>

要修复编码问题,只需:

  1. 使用代码页1252(或土耳其语1254)将字符串编码为字节数组。这应该产生UTF-8字节。
  2. 使用UTF-8将字节数组解码为字符串。