如何在ASP Classic中显示Oracle数据库中的阿拉伯字符
解决ASP Classic连接Oracle 11g中文乱码问题
嘿,这种中文乱码问题在ASP Classic+Oracle的老项目里真的是常客,我来给你分享几个亲测有效的解决思路:
对齐Oracle客户端与数据库的字符集
这是最常见的根源——ASP服务器上的Oracle客户端字符集和数据库端不匹配。你可以从两个地方入手:- 修改
tnsnames.ora的数据库连接配置,在节点里加上字符集指定,比如你的PIPCP节点可以改成:PIPCP = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 你的数据库地址)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = PIPCP) ) (CHARSET = AL32UTF8) -- 这里换成你数据库实际的字符集,比如ZHS16GBK ) - 直接在ASP的连接字符串里指定字符集,替换你原有的Open语句:
Connection1.Open "Data Source=PIPCP;User Id=PIP104;Password=xxxxxxxxxxxx;CHARSET=AL32UTF8"
- 修改
强制ASP页面的输出编码
在ASP页面的最顶部(任何HTML或输出之前)加上编码声明,确保页面输出的编码和数据库字符集对应:<%@ Language=VBScript CodePage=65001 %> <% Response.CodePage = 65001 %> <% Response.CharSet = "UTF-8" %>如果你的数据库用的是GBK/GB2312编码,就把
CodePage改成936,CharSet改成"gb2312"或者"gbk"。确认数据库端的字符集配置
先登录Oracle数据库,执行这条SQL确认数据库的字符集参数:SELECT PARAMETER, VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');确保你ASP端设置的编码和
NLS_CHARACTERSET的值对应:比如AL32UTF8对应UTF-8,ZHS16GBK对应GBK。换一种方式读取记录集值
有时候直接索引字段名读取会有编码转换问题,试试用GetString方法来获取结果:Dim custName If Not Recordset.EOF Then custName = Recordset.GetString(2, 1, "", "", "") Response.Write custName End If
最后提醒下,修改完客户端配置后记得重启IIS,确保配置生效。如果之前试过部分方法没效果,检查是不是某一步的编码没完全对齐——比如数据库是GBK但页面设成了UTF-8,这种错位肯定会出乱码。
内容的提问来源于stack exchange,提问作者syedcic
相关产品推荐
相关产品推荐

