我遇到了一个关于正确转换法语字符的问题。基本上,我有一个表单将数据发送到SQL数据库。然后,在另一个页面上,从该数据库检索数据并向用户显示。但是,因为在另一页表单中输入的是法语,所以数据(字符串)会显示为带有奇怪的损坏字符。我通过使用以下函数来克服此问题,该函数将字符串转换为正确的字符集。然而,显然更好的解决方案是先进行转换,然后再将其发送到数据库。现在这里是用于将从数据库检索的字符串转换为适当字符集的代码:
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
我从这里得到了这个函数:Classic ASP - 如何将UTF-8字符串转换为UCS-2? 现在我的问题是,我需要使用什么函数来在将字符串发送到数据库之前将其转换,以便在检索它们时可以直接使用?
尝试了Paul的方法:
所以有第一页和第二页。第一页包含一个表单,当提交表单时会将字符串发送到数据库,然后在第二页中检索。我尝试了Paul的解决方案,删除了ConvertFromUTF8函数,并将其恢复为之前的状态(它返回了奇怪的蒙古字符)。之后,在第一页和第二页页面顶部添加了以下行。
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
我在这两个页面上也有以下内容:
Response.CodePage = 65001
Response.CharSet = "UTF-8"
但是它没有起作用 :(
编辑:它起作用了!非常感谢大家的帮助!我所需要做的就是在第3页(我甚至没有提到)中添加"CodePage = 65001",这是写入数据库部分发生的地方。
<meta>
标签和Content-Type
响应头中的Charset
声明是多余的。当没有其他信息时,浏览器默认使用 UTF-8。但是,设置Session.CodePage = 65001
也是必要的。 - TomalakUTF-8
而不是Windows-1252
,一旦你这样做了,你的字符将从输入到数据库再到输出保持一致。使用@Paul的建议(https://dev59.com/n3zaa4cB1Zd3GeqPSqfR#21873977)。请注意:1.你的asp页面需要保存为`UTF-8`而不仅仅是有声明。2.你需要在页面顶部指定`<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>。3.使用
Response.CodePage = 65001和
Response.Charset = "UTF-8"告诉服务器以
UTF-8返回字符串,并告诉浏览器使用
UTF-8`编码。 - user692942记事本
、Visual Studio
等工具。对于Visual Studio
来说,它有一个隐藏的菜单选项,你需要去找到并启用它,这个选项叫做“高级保存选项”。 - user692942