我有一个问题,我在SQL Server中将UTF-8字符串存储为UCS-2。当我将其拉出来显示内容类型设置为UTF-8的页面时,它可以正常工作。但我有一个第三方Javascript组件,当我传递数据库的字符串时,它将其呈现为USC2。或者不是UTF8。
在从数据库中读取该字符串并将其传递给第三方组件(混淆)后,ASP中是否有办法将此字符串转换为UTF-8?
希望这是有道理的。
答案 0 :(得分:40)
我怀疑你是否会对经典形式的帖子字符编码不匹配问题犯规。
它是这样的: -
如果直接使用SQL Server工具检查字段内容,您可能会在那里看到损坏的字符串。现在你想要将这个字符串与另一个期望直接unicode字符串的组件一起使用,这就是你发现这个bug的地方。
解决方案是始终确保您的所有页面不仅在响应中发送CharSet =“UTF-8”,而且在使用Response.Write之前和尝试读取任何Request.Form值之前也使用Response.CodePage = 65001。在<%@ page header。
中使用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
此函数(BTW是您实际问题的答案)采用损坏的字符串(具有字节表示字节的字符串)并转换为应该具有的字符串。您需要将此转换应用于已成为该bug的受害者的DB中的每个字段。
答案 1 :(得分:-4)
Encoding.UTF8和Encoding.Unicode将提供足够的功能。有关详细信息,请参阅Wikipedia