首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

Java 后台servlet编码的有关问题

2012-12-20 
Java 后台servlet编码的问题如下所示,一下是doPost的方法体没明白resp.setCharacterEncoding(utf-8) 这

Java 后台servlet编码的问题
如下所示,一下是doPost的方法体
没明白
resp.setCharacterEncoding("utf-8") 这一句为什么不起作用而导致resp.getOutputStream().println(req.getParameter("test")) 出现错误。
response对象的编码仍然是iso8859-1。

另外,我以doGet方式提交的时候,后台打印
new String(value.getBytes("ISO8859-1"),"utf-8")仍然是乱码。这个转码没作用吗?


try {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");  // 未起作用
resp.setCharacterEncoding("utf-8");              // 未起作用
System.out.println("do exe:");
System.out.println(req.getParameter("test"));
resp.getOutputStream().println(new String("测试".getBytes("utf-8"),"iso8859-1"));
resp.getOutputStream().println(req.getParameter("test"));  // 报错行
resp.getOutputStream().close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


输出结果:
do exe:
测试
java.io.CharConversionException: Not an ISO 8859-1 character: 测
[最优解释]
resp.getOutputStream().println改为resp.getWriter().println要用字符流
[其他解释]
req.setCharacterEncoding("utf-8")貌似只对post请求有用
试下new String(req.getParameter("test").getBytes("iso-8859-1"),"utf-8")
[其他解释]
试试这个
用post提交
PrintWriter out = response.getWriter();
out.println(".......");
[其他解释]
web.xml的<?xml version="1.0" encoding="UTF-8"?>

还有如果是用的mysql数据库的话:

创建数据库时最好指定字符集,例如:
create database db default character set utf8;

写连接数据库代码时可以在url后面加些参数:String url = "jdbc:mysql://localhost:8080/db?useUnicode=true&characterEncoding=utf8";





[其他解释]
改为resp.getWriter().println,用字符流这样比较靠谱。
[其他解释]
你用的是tomcat么?如果是的话,可以试试修改/conf/server.xml中,添加URIEncoding="utf-8",并重启服务器,页面也要统一utf-8编码
[其他解释]
你用的什么数据库,把连接数据库的代码show一下
[其他解释]
引用:
web.xml的<?xml version="1.0" encoding="UTF-8"?>

还有如果是用的mysql数据库的话:

创建数据库时最好指定字符集,例如:
create database db default character set utf8;

写连接数据库代码时可以在url后面加些参数:String url = "jdbc:mysql……


还没连数据库, “测试”这两个字是从前台HTML传过来的。
[其他解释]
从前台传来的时候汉字从utf-8转为iso8859-1了,我在后台再转为utf-8应该不会出乱码了啊。

post方式我req.setCharacterEncoding("utf-8")再req.getParameter("test"),这得到的不是乱码。

get方式new String(value.getBytes("ISO8859-1"),"utf-8") 这样转码以后仍然是乱码,以前好像没遇到这情况。

resp.setCharacterEncoding("utf-8") 这设置了编码格式 但是 resp.getOutputStream().println("测试") 仍然报错 java.io.CharConversionException: Not an ISO 8859-1 character: 测   
求解啊!
[其他解释]
你看一下浏览器的默认编码吧,代码好像没啥问题!
------其他解决方案--------------------


最好把你的编码都统一一下,不要一会IOS 8859-1,一会儿utf-8.要么写个过滤器试试!
[其他解释]
所有的编码格式都改下吧!我也经常遇到这种问题,数据库,编程软件,以及前台的编码格式都要改成一致的,不然以后的开发会越来越麻烦
[其他解释]
查看一下你浏览器显示数据的编码格式。
[其他解释]
可以修改一下本机电脑的环境变量试一试

我的电脑-右键属性-高级-环境变量-系统变量

在系统变量里面配置

变量名:JAVA_TOOL_OPTIONS
变量值:-Dfile.encoding=UTF-8
[其他解释]
配个过滤器试试
[其他解释]
要同一编码。
[其他解释]
System.out.println("编码格式为:"+java.nio.charset.Charset.defaultCharset());
首先输出你的编码格式,如果不是UTF-8

建议配置本机环境变量

我的电脑-属性-高级-环境变量-系统变量
变量名:JAVA_TOOL_OPTIONS
变量值:-Dfile.encoding=UTF-8

配置后就可以搞定乱码问题
[其他解释]

引用:
改为resp.getWriter().println,用字符流这样比较靠谱。



[其他解释]
-我记得似乎是把response.setCharacterEncoding("UTF-8");
放到最后一行,楼主不妨试试。。 

热点排行