经典ASP字符编码

7
我在一个经典的asp网站中遇到了西班牙语字符的问题。用户可以在aspx页面上的表单中提交他们的姓名/地址。然后,aspx页面会向一个经典的asp页面进行ajax post,而该asp页面只是将数据存储在我们的Sql 2008数据库中。我可以在数据库中看到字符未被正确存储。例如,名字应该是,但实际上看起来像Mª
当我读取这些数据并在文本框中显示时,它仍然显示为Mª
我尝试过以下方法:
  • <%@ Language=VBScript codepage=65001 %> <% Response.Charset="UTF-8" %>
  • 使用notepad++将文件编码为UTF-8
还有其他想法吗?我需要回到数据库中先修复字符,还是可以在读取和显示字符时完成修复?

1
你发布的代码既包含用于接收表单POST的文件,也包含原始表单的文件吗?你使用GET还是POST作为表单方法?你使用哪个数据库引擎?你读过这个答案吗:https://dev59.com/F3NA5IYBdhLWcg3wjOpS#920405? - AnthonyWJones
表单位于一个aspx页面上,它通过ajax提交到一个经典的asp页面,该页面将数据保存在数据库中。我已经检查过了,这个asp页面里没有编码信息。 - earthling
我能够使用您提供的帖子中的代码片段,它似乎能够正确地转换字符以进行显示。 - earthling
你可以修复数据库中的损坏,但你还需要找到损坏的源头并加以修复。开始处理的地方是仔细阅读我上面提出的每个问题,并逐个回答。 - AnthonyWJones
http://www.hanselman.com/blog/InternationalizationAndClassicASP.aspx - Mitch Wheat
2个回答

12

当我开始在ASP中使用utf-8时,遇到了同样的问题,后来发现session.CodePage是关键。在经典ASP页面中,始终要执行此首个ASP声明,以确保所有页面都使用UTF-8进行数据、表单、ASP代码、接收或发送的数据。

<%@Language=VBScript CodePage = 65001%>
<%
Session.CodePage = 65001
Response.charset ="utf-8"
Session.LCID     = 1033 'en-US
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

谢谢,这正是我最终添加以解决问题的方法,还需要清理插入不正确的数据。 - earthling
把会话相关的东西都放在 Session_OnStart() 里面不是更合理吗? - Bond

3
你看到的是UTF-8编码。它应该是完全正确的,问题可能在于你所使用的工具无法正确地处理UTF-8编码,这可能是因为它不能处理或者配置不正确。

1
“工具”是一个可以在Firefox、IE或Chrome中使用的ASP页面。 - earthling
那么页面会被浏览器解释为UTF-8吗? - tripleee
我该如何检查并强制其他用户使用相同的编码和响应字符集?我已经设置了代码页和响应字符集。 - earthling
至少在Firefox中,它会在页面属性或类似位置告诉您。检查HTTP响应的Content-Type标头;如果您的HTML中没有合适的http-equiv元标记,请添加一个。 - tripleee
好的,在这种情况下,工具是一个经典的ASP页面,所以如果数据是UTF-8编码,应该有编码声明:Session.CodePage = 65001 Response.charset ="utf-8"不同的是,如果数据使用另一种编码方式,如Win-1252,则声明必须相应地进行调整。 - user2033838

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接