2010-05-27 60 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