我有一個問題,我在UCS-2中存儲一個UTF-8字符串在SQL Server中。當我將它拉出來顯示在內容類型設置爲UTF-8的頁面上時,它工作正常。但是我有第三方的Javascript組件,當我將它傳遞給數據庫的字符串時,它將它呈現爲USC2。或者不是UTF8。經典ASP - 如何將UTF-8字符串轉換爲UCS-2?
在從數據庫中讀取字符串並將其傳遞給第三方組件(混淆)之後,ASP將此字符串轉換爲UTF-8嗎?
希望這是有道理的。
我有一個問題,我在UCS-2中存儲一個UTF-8字符串在SQL Server中。當我將它拉出來顯示在內容類型設置爲UTF-8的頁面上時,它工作正常。但是我有第三方的Javascript組件,當我將它傳遞給數據庫的字符串時,它將它呈現爲USC2。或者不是UTF8。經典ASP - 如何將UTF-8字符串轉換爲UCS-2?
在從數據庫中讀取字符串並將其傳遞給第三方組件(混淆)之後,ASP將此字符串轉換爲UTF-8嗎?
希望這是有道理的。
Encoding.UTF8和Encoding.Unicode將提供足夠的功能性。欲瞭解更多信息,請參閱Wikipedia
我懷疑你是經典形式後字符編碼不匹配問題的犯規。
它是這樣的: -
如果您直接使用SQL Server工具檢查字段內容,那麼您可能會在其中看到損壞的字符串。既然你想用這個字符串與另一個期望一個直接unicode字符串的組件,這是你發現這個錯誤的地方。
解決方案是始終確保您的所有頁面不僅在響應中發送CharSet =「UTF-8」,還在使用Response.Write之前和嘗試讀取任何Request.Form值之前使用Response.CodePage = 65001。在<%@頁面標題中使用Codepage指令。
現在您只需修復已損壞的字符串就可以了。
使用ADODB。流: -
Function ConvertFromUTF8(sIn)
Dim oIn: Set oIn = CreateObject("ADODB.Stream")
oIn.Open
oIn.CharSet = "WIndows-1252"
oIn.WriteText sIn
oIn.Position = 0
oIn.CharSet = "UTF-8"
ConvertFromUTF8 = oIn.ReadText
oIn.Close
End Function
此函數(BTW是回答你的問題實際)發生損壞的字符串(一個具有字節表示的字節),並轉換爲字符串它應該是。您需要將此轉換應用於數據庫中已經成爲該bug的受害者的每個字段。
三年後...真棒回答!我知道我「陷入了經典的形式後字符編碼不匹配問題」,但我不知道它在哪裏發生。如果我能強制這是被接受的答案,我會的。 – Brendan 2012-06-12 15:37:20
-1這是傳統的ASP,而不是ASP.NET。 – 2009-05-27 14:48:47