所以我遇到了正确转换法语字符的问题。基本上,我有一个将数据发送到SQL数据库的表单。然后,在另一页上,检索来自该DB的数据并将其显示给用户。但是数据(字符串)显示的是错误的损坏字符,因为另一页上表单中的输入是法语。我通过使用以下函数克服了这个问题,该函数将字符串转换为正确的字符集。但是,显然更好的解决方案是将其转换为FIRST然后将其发送到数据库。现在,这是将从DB检索的字符串转换为适当的字符集的代码:
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 - How to convert a UTF-8 string to UCS-2?
现在我的问题是,我使用什么函数预先转换字符串然后将它们发送到数据库,这样当我检索它们时它们会很好用?
尝试保罗的方法:
所以有第1页和第2页。第1页包含一个表单,当提交时,它将字符串发送到DB,然后在第2页中检索。我通过删除函数ConvertFromUTF8并将其保留为as来尝试Paul的解决方案。它是在之前(它返回了奇怪的mangolian字符)。之后,我在第1页和第2页上添加了以下行。
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
我在两个页面上都有以下内容:
Response.CodePage = 65001
Response.CharSet = "UTF-8"
但它不起作用:(
编辑:它有效!,非常感谢大家的帮助! 我需要做的就是在第3页(我甚至没有谈到)之上添加“CodePage = 65001”,其中写入数据库部分正在发生。
答案 0 :(得分:7)
保罗的回答没有错,但它不是故事的唯一部分
您需要完成以下每个步骤,以确保获得一致的结果;
重要提示:必须在您的网络应用程序的每个页面上执行这些步骤,否则您将遇到问题(Paul的评论强调)。
UTF-8
编码仔细检查一下,因为某些IDE默认为Windows-1252
(通常也误称为“ANSI”)。每个页面都需要添加以下行作为页面的第一行,为了更容易,我将它与包含文件中的其他一些值放在一起,这样我就可以在每个页面中包含它们
<%@Language="VBScript" CodePage = 65001 %>
<%
Response.CharSet = "UTF-8"
Response.CodePage = 65001
%>
ASP页面顶部的用法(更喜欢放在网络根目录下的配置文件夹中)
<!-- #include virtual="/config/page_encoding.asp" -->
Response.Charset = "UTF-8"
相当于在HTTP ;charset
标头中设置content-type
。
Response.CodePage = 65001
告诉ASP将所有动态字符串处理为UTF-8
。
页面中的包含文件也必须使用UTF-8
编码保存(也请仔细检查)。
按照以下步骤操作,您的页面就会正常工作,目前您的问题是某些网页被解释为Windows-1252
而其他网页被视为UTF-8
,而您最终会被误解为匹配编码。
答案 1 :(得分:3)
通常情况下 - 这个词有一个非常长的伸展 - 你不需要手头转换,甚至更多的是气馁。在您编写的asp页面顶部:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
告诉ASP发送和接收(从服务器的角度来看)UTF-8。此外,它指示解释器使用2个字节的字符串。因此,当写入数据库或从数据库读取时,一切都会自动进行,因此如果您的数据库使用1字节char
或2字节nchar
,则会进行转换。实际上就是这样。您可以通过使用此集进行测试来测试是否一切顺利:
áäÇçéčëíďńóöçÖöÚü
这个集合包含一些'欧洲',但也包含一些'Unicode'字符......如果你使用代码页1252那些Unicode将永远失败,所以它是一个不错的测试集。