2010-05-27 55 views
0

修复不良性格最近我们在我们的系统中的编码问题:由于编码的问题

如果我们在我们的数据库字符串“AE”,成为“Ã|”在我们的网页。

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

我发现,如果你在UTF-8 C3A6读,你会得到“AE”,如果你在ASCII读它,你会得到“Ã|”。

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

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

我没有相同的结果...

你对我如何可以解决我的数据库中的任何想法(即更改全部“ |“到”æ“)?

THX

回答

1

据我所知,解决的唯一办法就是用替换:

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

在这种情况下,我假定列现在是Unicode(即或为nvarchar NCHAR)。

+0

我知道如何做一个替换,在这里我想处理每一个奇怪的字符:“ó”变成了“Ô。我倒是喜欢做的东西我可以处理每一个情况下(我说在我的岗位有预期的性格和坏之间的逻辑连接,因此必须有办法回去)。 – 2010-05-27 15:40:09

+0

@remi bourgarel - 这是我的观点。除了通过一系列对Replace的调用手动纠正数据外,没有银弹解决方案。您不会得到1:1的匹配,因为在某些情况下,Unicode可能会将您的文本编码为两个字符而不是一个字符。 – Thomas 2010-05-27 15:47:50

+0

作为托马斯说,这里没有银弹... dommage – 2011-09-05 14:12:23

0

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

ASCII仅将字符分配给字节00-7F。有,但是,几个 “扩展ASCII” 编码,其中C3 A6代表 “Ã|”,其中包括著名的西欧编码ISO-8859-1和windows-1252,和土耳其ISO-8859-9和Windows-1254。

若要修正编码的问题,只需:

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

你有任何想法,如果我可以用sql做到这一点? – 2010-05-31 07:38:41