关于一个很头痛的问题——乱码

「已注销」 2012-12-13 08:34:48
相信大家都遇到过页面乱码,数据库乱码的时候把,说说我的:
我的事Mysql数据库,设置的字符集是utf-8.页面编码全部是utf-8。整个项目全部是utf-8的编码:
1.我可以直接在数据库里面手动插入中文,英文,然后在页面中将数据库内容读出来都是正常的,没有乱码;
2.在页面表单填入英文字符,提交的数据库都是好的;
3.如果在Jsp页面的表单里面有中文的话,提交到数据库里面,数据库中提交的中文部分就是乱码的,页面读出来也是乱码
4.如果在jsp表单提交的action(LoginAction)中的execute方法中强制转换页面中的中文部分,可以实现不乱吗,并且这种强制装换只能是(比方说提交的user.username为中文)
user.setUsername(new String(user.getUsername().getBytes("iso-8859-1"),"utf-8");像这样转换后提交到数据库的就不乱码了。并且只能这样装换,换别的编码都不行。



以前数据库字段比较少,就转换了一下,现在数据库字段多了发现这样转换很麻烦,这个问题怎么解决。网上看了很多,也请教过别人,都没有解决。

总的来说就是插不进去中文,可以读出中文。。
求赐教~~~~~~
...全文
626 42 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
shengda323 2012-12-17
  • 打赏
  • 举报
回复
不要用UTF-8 全部设置成GBK 就不会了!
「已注销」 2012-12-17
  • 打赏
  • 举报
回复
引用 41 楼 w229051923 的回复:
直接在mysql的行中插入数据保存刷新之后 看看是不是乱码就知道了。 如果是乱码吧mysql的默认改成gbk 搞定。
问题说的很清楚了,明显不乱啊
A_persons_journey 2012-12-17
  • 打赏
  • 举报
回复
直接在mysql的行中插入数据保存刷新之后 看看是不是乱码就知道了。 如果是乱码吧mysql的默认改成gbk 搞定。
Luger 2012-12-16
  • 打赏
  • 举报
回复
mark 你还可以输入9996个字符
「已注销」 2012-12-16
  • 打赏
  • 举报
回复
我刚刚进行了各种测试,发现了最简单的解决方法。就是吧org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter换成 org.apache.struts2.dispatcher.FilterDispatcher.我上面所说的乱码问题就全部解决了,什么过滤器都不用。我用的是struts2.为什么会出现这种情况,谁来解释一下
FCKman 2012-12-16
  • 打赏
  • 举报
回复
到页面的时候还要判断浏览器的类型的一般分火狐和IE就行了,判断下
「已注销」 2012-12-16
  • 打赏
  • 举报
回复
引用 34 楼 huanqiusijia 的回复:
解决了没有,lz呀,问题你说你找到了jsp到action,,那估计确实是传值有问题,上面说了这么方法都不行,你按照我的笨试一下 1.我看了你的过滤器,我也不知道你是用了什么框架,如果自己写过滤器我感觉你那些写好像还是有点的儿问题吧,你就按照我的写个doFilter Java code?12345678910111213141516171819202122232425p……
嗯。谢谢啊。大家讨论有什么说什么,。都没事。这个我已经解决了,是25楼的高手帮我远程弄好了。你这个我再弄一个工程试试 看,我用的SSH2.不是公司的,大学生,自己在寝室自学中,谢谢大家的帮助了。
「已注销」 2012-12-16
  • 打赏
  • 举报
回复
引用 34 楼 huanqiusijia 的回复:
解决了没有,lz呀,问题你说你找到了jsp到action,,那估计确实是传值有问题,上面说了这么方法都不行,你按照我的笨试一下 1.我看了你的过滤器,我也不知道你是用了什么框架,如果自己写过滤器我感觉你那些写好像还是有点的儿问题吧,你就按照我的写个doFilter Java code?12345678910111213141516171819202122232425p……
嗯。谢谢啊。大家讨论有什么说什么,。都没事。这个我已经解决了,是25楼的高手帮我远程弄好了。你这个我再弄一个工程试试 看,我用的SSH2.不是公司的,大学生,自己在寝室自学中,谢谢大家的帮助了。
makesoy1 2012-12-15
  • 打赏
  • 举报
回复
解决了没有,lz呀,问题你说你找到了jsp到action,,那估计确实是传值有问题,上面说了这么方法都不行,你按照我的笨试一下 1.我看了你的过滤器,我也不知道你是用了什么框架,如果自己写过滤器我感觉你那些写好像还是有点的儿问题吧,你就按照我的写个doFilter
public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		//设置请求编码
		HttpServletRequest req=(HttpServletRequest)request;
		if(req.getMethod().equalsIgnoreCase("post")){
			req.setCharacterEncoding("UTF-8");
		}else{
			Map map=req.getParameterMap();
			if(map.size()>0){
				Collection values=map.values();
				Iterator it=values.iterator();
				while (it.hasNext()) {
					String[] object = (String[]) it.next();
					for (int i = 0; i < object.length; i++) {
						object[i]=new String(object[i].getBytes("iso8859-1"),"UTF-8");
					}
					
				}
			}
		}
		//设置响应编码
		response.setContentType("text/html;charset=UTF-8");
		chain.doFilter(request, response);
		
	}
这个过滤器方法你记得要在web.xml里面自己配置一下,如果这个还不可以的话,继续下面 1.重新新建一个项目(随便搭建一个框架只要跑通jsp到action),代码基本就按照现成项目复制过来,注意设置所有编码统一,上面这么多人都说了,肯定还是有用的,过滤器还是用我的吧,你的那个我感觉不对,不要有意见哦,,你要是用了spring的话,就直接配置spring的过滤器,应该是不可能出错的啊,你页面也都编码统一了。 2.还是不行,你就重新换台别人电脑试一下吧,,,,别人电脑没有问题就证明你电脑有问题了,不行找原因就重新装个,也快而且省事,,估计是这些都不需要的,反正要解决这个问题就一步一步来吧,耐心点,说不定你就那个地方写错了,按照上面那么多大哥的方法你都不成功,按理来说是不可能的啊,再回过头来看看吧,, 3.还不行话,那你就坑爹了,砸电脑吧,是公司项目就离职吧,是自己电脑搭建环境就重新开发,网上找个例子试验一下, 这是我解决问题的办法,你试一下,。。。
「已注销」 2012-12-14
  • 打赏
  • 举报
回复
引用 25 楼 nicholasbobo 的回复:
引用 22 楼 zjq123128976 的回复:引用 20 楼 nicholasbobo 的回复: 引用 18 楼 zjq123128976 的回复:引用 16 楼 nicholasbobo 的回复: 跟数据库之间的乱码问题,必须在连接数据库的URL里指定字符编码: ,假如是MYSQL,URL写成下面的格式: jdbc:mysql://hostname[:por……
没问题。加123128976
nicholasbobo 2012-12-14
  • 打赏
  • 举报
回复
引用 22 楼 zjq123128976 的回复:
引用 20 楼 nicholasbobo 的回复: 引用 18 楼 zjq123128976 的回复:引用 16 楼 nicholasbobo 的回复: 跟数据库之间的乱码问题,必须在连接数据库的URL里指定字符编码: ,假如是MYSQL,URL写成下面的格式: jdbc:mysql://hostname[:port]/dbname?characterEncoding=utf-8 我这个……
能给我QQ吗?我帮你远程,我还不信了
「已注销」 2012-12-14
  • 打赏
  • 举报
回复
引用 23 楼 ruankaolianmengzhuyi 的回复:
引用 21 楼 zjq123128976 的回复:引用 19 楼 ruankaolianmengzhuyi 的回复:你试试把Tomcat的server.xml改一下字符集。如果真的是jsp-action有乱码的话,应该可以解决。 网上查了很多,也找朋友看过。网友远程过,都没有解决。上面各位说的方法我都试了,还是不行URIEncoding="utf-8" 这个木有用? ……
嗯,乱码依旧
乌衣 2012-12-14
  • 打赏
  • 举报
回复
引用 21 楼 zjq123128976 的回复:
引用 19 楼 ruankaolianmengzhuyi 的回复:你试试把Tomcat的server.xml改一下字符集。如果真的是jsp-action有乱码的话,应该可以解决。 网上查了很多,也找朋友看过。网友远程过,都没有解决。上面各位说的方法我都试了,还是不行
URIEncoding="utf-8" 这个木有用?
「已注销」 2012-12-14
  • 打赏
  • 举报
回复
引用 20 楼 nicholasbobo 的回复:
引用 18 楼 zjq123128976 的回复:引用 16 楼 nicholasbobo 的回复: 跟数据库之间的乱码问题,必须在连接数据库的URL里指定字符编码: ,假如是MYSQL,URL写成下面的格式: jdbc:mysql://hostname[:port]/dbname?characterEncoding=utf-8 我这个不是与数据库之间的乱码吧,据……
看了,也都是设置的utf-8编码的。我在别人的帖子里也看到了这个问题,就是jsp和action之间传值发生的乱码,。好像传值用的是Iso-8859-1,所以非要那样强制转换,怎么能够改变页面的传值编码方式了,如果能改成utf-8就应该没问题了,求赐教
「已注销」 2012-12-14
  • 打赏
  • 举报
回复
引用 19 楼 ruankaolianmengzhuyi 的回复:
你试试把Tomcat的server.xml改一下字符集。如果真的是jsp-action有乱码的话,应该可以解决。
网上查了很多,也找朋友看过。网友远程过,都没有解决。上面各位说的方法我都试了,还是不行
nicholasbobo 2012-12-14
  • 打赏
  • 举报
回复
引用 18 楼 zjq123128976 的回复:
引用 16 楼 nicholasbobo 的回复:
跟数据库之间的乱码问题,必须在连接数据库的URL里指定字符编码:
,假如是MYSQL,URL写成下面的格式:
jdbc:mysql://hostname[:port]/dbname?characterEncoding=utf-8
我这个不是与数据库之间的乱码吧,据我自己测试。是jsp页面提交到action的中文乱码了。在action里面输……

那在提交表单时注意把提交方法设成post,如果是struts2的话,直接在web.xml里加一个struts2自带的乱码过滤器org.apache.struts2.dispatcher.ActionContextCleanUp;
如果是struts1的话,就自己写个乱码过滤器,把所有的request和response里的编码都设置成utf-8;
还有就是你工程的默认编码,要改成utf-8,设置方法右键工程——》属性——》resource:
乌衣 2012-12-14
  • 打赏
  • 举报
回复
你试试把Tomcat的server.xml改一下字符集。如果真的是jsp-action有乱码的话,应该可以解决。
「已注销」 2012-12-14
  • 打赏
  • 举报
回复
引用 16 楼 nicholasbobo 的回复:
跟数据库之间的乱码问题,必须在连接数据库的URL里指定字符编码: ,假如是MYSQL,URL写成下面的格式: jdbc:mysql://hostname[:port]/dbname?characterEncoding=utf-8
我这个不是与数据库之间的乱码吧,据我自己测试。是jsp页面提交到action的中文乱码了。在action里面输出来就是乱码,然后如果在action里面强制转换过来,整个项目就可以正常运行
「已注销」 2012-12-14
  • 打赏
  • 举报
回复
引用 13 楼 qizi88518537 的回复:
引用 10 楼 zjq123128976 的回复:照你说的输出后是GBK。然后配置环境变量后输出还是GBK。页面还是乱码 配置环境变量后 需要重启 LZ 重启电脑了么
电脑也重启了,输出是utf-8。但是还是乱码
nicholasbobo 2012-12-14
  • 打赏
  • 举报
回复
跟数据库之间的乱码问题,必须在连接数据库的URL里指定字符编码: ,假如是MYSQL,URL写成下面的格式: jdbc:mysql://hostname[:port]/dbname?characterEncoding=utf-8
加载更多回复(22)
USB Safely Remove是一个可以将USB设备安全删除的系统工具,能够有效帮助您解决无法删除USB设备的困扰。 USB Safely Remove是一个收费软件,网上有很多破解版,但有心的用户会发现,官方曾经举行了为期一周的免费赠送序列号活动,任何用户只需登陆活动页面,填写一个姓名和邮箱地址,即可免费获得USB Safely Remove v4.1.5.806的序列号。官方免费注册信息没有功能和时间的限制,不支持升级!但这就足够了! 官方Safely Remove v4.1.5.806原版在安装后会有乱码,要重新设置语言文件,还要在网上找免费注册码并输入。用起来不方便,尤其是新用户和一般的电脑用户! 这里推荐一个修改版的USB Safely Remove V4.1.5.806——已解决上面的问题。 USB Safely Remove V4.1.5.806修改版使用说明 (版权属于原作者,修改只为个使用方便,请勿传播) 0、基于原版制作的安装程序,和原版一样的方便——非破解、非绿色。 1、在原版的基础上加入官方免费注册信息——不用为破解而忧; 2、删除英文和简体中文之外的语言文件——精简至上; 3、自动设置软件界面为简体中文,避免了乱码——免去繁琐的设置; 4、去掉原版中开机自动启动设置,需要的请手动设置——只有在必要时才启动软件,不影响系统速度; 5、没有加入任何其它文件、信息——用则勿疑,疑则勿用!!! 6、官方免费注册信息没有功能和时间的限制,但不支持升级!

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧