<%!
public String getCrtStr(String str){
return new String(str.getBytes("ISO-8859-1"),"gb2312"); //有效
}
%>
<%
...
materialName = getCrtStr(materialName); //有效
...
%>
2另一种乱码现象,在servlet中
String subject=request.getParameter("subject");//接收一个中文
String content=request.getParameter("content");//接收一个中文
结果在后台打印为乱码
尝试1,使用new String(str.getBytes("ISO-8859-1"),"gb2312"); 转为GB2312格式,失败
尝试2,使用new String(str.getBytes("GB2312"),"8859_1");转化为8859_1格式,仍然失败
尝试3,在接收参数前,调用request.setCharacterEncoding("GBK");失败,
尝试4,在接收参数前,调用request.setCharacterEncoding("utf-8");成功!
注意到所有的JSP文件都是utf-8格式,JSP页面中编码都为utf-8,因此尝试4得以成功。
不过这种格式似乎并不值得推荐,ansi格式外加GBK编码更加值得使用吧。
3,尽管在插入数据库前中文字符已经,但是执行insert语句之后,数据库中出现中文字符乱码!
在查询分析其中执行
insert into article(CategoryID,Subject,Content) values(1,'你好','你好');
数据库中出现乱码,此时在中文字符前加N,则可以解决这个问题
insert into article(CategoryID,Subject,Content) values(1,N'你好',N'你好');OK,因此,解决servlet中insert乱码问题,只需要修改原来的语句(加N),最终形式如下:
String sqlStr = "insert into article(CategoryID,Subject,Content) values("+
classID+",N'"+
subject+"',N'"+
content+"')";
4,对于nvarchar和varchar类型的字段,中文问题可以解决,但是text类型的字段,始终不得其解,只能暂时绕过,有待研究。
另外把一个UTF8编码的JSP存为ANSI格式,则除了数据库取出的文字,其余都会产生乱码。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11049438/viewspace-967499/ ,如需转载,请注明出处,否则将追究法律责任。