我在 SQL Server 中将 UTF-8 字符串存储为 UCS-2 时遇到问题。当我将其拉出以显示在内容类型设置为 UTF-8 的页面上时,它工作正常。但是我有一个第三方 Javascript 组件,当我将它传递给数据库的字符串时,它会将其呈现为 USC2。或者不是UTF8。
在从数据库中读取该字符串以将其传递给第三方组件(混淆)后,ASP 中有没有办法将其转换为 UTF-8?
希望这是有道理的。
最佳答案
我的怀疑是您遇到了经典的表单后字符编码不匹配问题。
它是这样的:-
如果您直接使用 SQL 服务器工具检查字段内容,您可能会在那里看到损坏的字符串。现在您想将此字符串与另一个需要直接 unicode 字符串的组件一起使用,这就是您发现此错误的地方。
解决方案是始终确保您的所有页面不仅在响应中发送 CharSet = "UTF-8",而且还在使用 Response.Write 和尝试读取任何 Request.Form 值之前使用 Response.CodePage = 65001。在 <%@ 页眉中使用 Codepage 指令。
现在您需要修复数据库中已有的损坏字符串。
使用 ADODB.Stream:-
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
这个函数(顺便说一句是你实际问题的答案)接受一个损坏的字符串(一个具有字节表示的字节)并转换为它应该是的字符串。您需要将此转换应用于已成为该错误受害者的数据库中的每个字段。
关于utf-8 - 经典 ASP - 如何将 UTF-8 字符串转换为 UCS-2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/916118/