当前位置: 技术问答>java相关
向高手求救,JSP程序在进行数据库查询时的条件字段的中文问题!!!
来源: 互联网 发布时间:2017-03-08
本文导语: 我写的一个查询程序不知怎么有时会出现条件字段中文无法正常显示现象,但有时正常,调试时发现TOMCAT控制台上打印出SQL语句为: select 字段1,字段2... from table1 where table1.字段名='?????' 用ascii2Unicode函数(见下...
我写的一个查询程序不知怎么有时会出现条件字段中文无法正常显示现象,但有时正常,调试时发现TOMCAT控制台上打印出SQL语句为:
select 字段1,字段2... from table1 where table1.字段名='?????'
用ascii2Unicode函数(见下面程序)改成:
String Strtemp=ascii2Unicode(字段值);
select 字段1,字段2... from table1 where table1.字段名="'"+Strtemp+"'";
还是不行,请问这怎么回事?是否有更简单的方式,比如在WEB环境文件中配置?
public static String ascii2Unicode(String str)
{
String temp_p = str;
try
{
byte[] temp_t = temp_p.getBytes("ISO8859-1");
String temp = new String(temp_t,"GB2312");
return temp;
}
catch(Exception e)
{
return "";
}
}
select 字段1,字段2... from table1 where table1.字段名='?????'
用ascii2Unicode函数(见下面程序)改成:
String Strtemp=ascii2Unicode(字段值);
select 字段1,字段2... from table1 where table1.字段名="'"+Strtemp+"'";
还是不行,请问这怎么回事?是否有更简单的方式,比如在WEB环境文件中配置?
public static String ascii2Unicode(String str)
{
String temp_p = str;
try
{
byte[] temp_t = temp_p.getBytes("ISO8859-1");
String temp = new String(temp_t,"GB2312");
return temp;
}
catch(Exception e)
{
return "";
}
}
|
解决办法:
第一:
在jsp页面加入:
或者在servlet里面
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=gb2312");
上面的如果在不行就用如下的方法在数据入库前进行调用:
public static String UnicodeToChinese(String s){
try{
if(s==null||s.equals("")) return "";
String newstring=null;
newstring=new String(s.getBytes("ISO8859_1"),"gb2312");
return newstring;
}
catch(UnsupportedEncodingException e)
{
return s;
}
}
public static String ChineseToUnicode(String s){
try{
if(s==null||s.equals("")) return "";
String newstring=null;
newstring=new String(s.getBytes("gb2312"),"ISO8859_1");
return newstring;
}
catch(UnsupportedEncodingException e)
{
return s;
}
}
第一:
在jsp页面加入:
或者在servlet里面
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=gb2312");
上面的如果在不行就用如下的方法在数据入库前进行调用:
public static String UnicodeToChinese(String s){
try{
if(s==null||s.equals("")) return "";
String newstring=null;
newstring=new String(s.getBytes("ISO8859_1"),"gb2312");
return newstring;
}
catch(UnsupportedEncodingException e)
{
return s;
}
}
public static String ChineseToUnicode(String s){
try{
if(s==null||s.equals("")) return "";
String newstring=null;
newstring=new String(s.getBytes("gb2312"),"ISO8859_1");
return newstring;
}
catch(UnsupportedEncodingException e)
{
return s;
}
}
|
解决中文显示问题的几个方法:
1.修改区域设置:在控制面版中选择区域设置,设为英语(美国), 然后重起。一切就都正常。
2.在jsp页顶部加入一条语句:
中文显示就正常了。
3.在编译servlet和jsp时加入代码选项。编译servlet使用
javac -encoding iso8859_1 myservlet.java
在jsp的zone配置文件中.修改编译参数为:
compiler=builtin-javac -encoding ISO8859_1
使用这种方法后,不需要作其他的改动就可以正常显示中文了。
4.最土的办法,在servlet源程序中加入代码变换语句。如
String name = request.getParameter( "username ");
if(name == null) name=" ";
name=new String(name.getBytes("ISO8859_1"));
具体方法:在页面顶部加
然后写入数据库时使用方法4进行编码,否则数据库中看到的是乱码!
如果你在直接打开数据时看到的是正常的中文,那么你查询字符也用正常中文字符,无须编码。如果你的数据库里已经时乱码时,你的查询字符要编码!
我建议除了在写入数据库时要编码
外,其他jsp页面统一用方法:在页面顶部加
我也遇到这个问题很多次,不知道你的可否这样解决?
1.修改区域设置:在控制面版中选择区域设置,设为英语(美国), 然后重起。一切就都正常。
2.在jsp页顶部加入一条语句:
中文显示就正常了。
3.在编译servlet和jsp时加入代码选项。编译servlet使用
javac -encoding iso8859_1 myservlet.java
在jsp的zone配置文件中.修改编译参数为:
compiler=builtin-javac -encoding ISO8859_1
使用这种方法后,不需要作其他的改动就可以正常显示中文了。
4.最土的办法,在servlet源程序中加入代码变换语句。如
String name = request.getParameter( "username ");
if(name == null) name=" ";
name=new String(name.getBytes("ISO8859_1"));
具体方法:在页面顶部加
然后写入数据库时使用方法4进行编码,否则数据库中看到的是乱码!
如果你在直接打开数据时看到的是正常的中文,那么你查询字符也用正常中文字符,无须编码。如果你的数据库里已经时乱码时,你的查询字符要编码!
我建议除了在写入数据库时要编码
外,其他jsp页面统一用方法:在页面顶部加
我也遇到这个问题很多次,不知道你的可否这样解决?
|
request.setCharacterEncoding("gb2312");