解决方案 »
- 求助!httpclient2.0的替代方法
- java拆分日期
- java 怎么把多个对象写进同一个文件里,用集合
- jquery动态加载的HTML
- 有没有不含防火墙的杀毒软件介绍?
- 在线等..mina问题
- web项目中如何使用JasperReport
- java目前去做CS架构的开发(面向运营商),会不会没有前途,影响职业发展?
- Java开发规范
- 谁能提供一个简单的 struts + hibernate 的例子啊????????????????????
- 在axis中如何在服务端实现类似Session/Application的环境来保持数据库连接等(我用WSDL2JAVA生成代码)?
- resin+jspsmartupload上传文件问题,在线等,一答对给50分,在线等
http://www.cnblogs.com/xuefuwu/archive/2012/05/06/2486577.html
这个设置可以解决命令行下得乱码,不过数据库里边都是Utf8编码,为何要设置为GBK才能解决命令行乱码呢
你从数据库获取数据的编码流程:
发送查询数据请求-----数据库从硬盘上把数据弄到内存(这里数据库本身有个编码转换,比如在硬盘上是GBK的,所以这里会将GBK的数据转成unicode,然后放到内存)-----然后把内存里的数据通过网络发送给你(这里有另外一层编码转换,用到了你的那个参数characterencoding,假如该参数值是UTF-8,然后就会把内存里的数据由unicode转换为UTF-8通过网络发给你)-----你的项目接收到数据后,放到内存里面(之前说过,在内存里是以unicode编码存在的,所以这里会由UTF-8转为unicode),然后你在程序里的一切操作,比如Sting.getByte("GBK"),就是将字符串由unicode编码为GBK的字节数据,然后new String(byte[],"UTF-8"),就是把字节数据当做UTF-8的编码格式来解析(其实他是GBK编码的,这里就会出现乱码),转为unicode编码,然后再存到内存。
同样,你发数据到数据库存储也一样。
现在应该知道为什么无论你设置characterencoding为什么编码,都不会乱码的原因了吧,一切都是因为有了中间的转换过程unicode,而这一部,对你是透明的。