接到现场的哥们的反馈,说是某些特殊的字,例如“旸、猄、镕”字录入系统的时候出现错误,显示为“?”,初步估计是GBK编码的问题,在本地测试了一下才发现原来部分页面使用的编码为GB2312,GB2312为GBK的一个子集,在大多数情况下可以满足需求(就是这个“大多数”情况害得),如果修改成GBK就没有这个问题了。
测试页面脚本如下

<%@ page contentType="text/html; charset=gb2312" %>
<%
String str=request.getParameter("AXXX");
System.out.println(str);
byte[] b = str.getBytes("ISO-8859-1");
str = new String(b,"Gb2312");
System.out.println(">>>>>>>>>>>>"+str);
%>
<form>
<input type="text" name="AXXX" value="中文测试 旸猄"/>
<input type=submit />
</form>

以上代码连显示都成问题,直接在输入框中显示就是乱码,将代码行
<%@ page contentType="text/html; charset=gb2312" %> 修改成 <%@ page contentType="text/html; charset=gbk" %>
str = new String(b,"Gb2312"); 修改成 str = new String(b,"Gbk");
str = new String(b,"Gb2312"); 修改成 str = new String(b,"Gbk");
问题迎刃而解。

而在ASP.NET中,确不存在这样的问题,在web.config中配置

<system.web>
   <globalization responseEncoding="gb2312" requestEncoding="gb2312"/>
</system.web>

然后测试输入这些字符,确没有产生错误,那么到底是ASP.NET自己设置的Gb2312没有生效还是咋滴??暂时不得而知。