latin1转gbk的乱码问题,jdbc的bug
程序员文章站
2022-03-09 22:17:03
...
有时候json文件,纯文本的文件在nginx或者tomcat上为乱码
可能不像html或者jsp那样可以设置字符编码
注意nginx和tomcat都有utf8的配置
另外要注意
文件也有编码
linux下用vim打开
:set encoding=utf-8
:set fileencoding=utf-8
转http://ssmax.net/archives/1136.html
参考http://www.wcode.net/plus/view.php?aid=246850
我的程序:
可能不像html或者jsp那样可以设置字符编码
注意nginx和tomcat都有utf8的配置
另外要注意
文件也有编码
linux下用vim打开
:set encoding=utf-8
:set fileencoding=utf-8
转http://ssmax.net/archives/1136.html
参考http://www.wcode.net/plus/view.php?aid=246850
由于以前偷懒的原因,很多数据库都是使用latin1作为字符编码,这样可以原样保留数据的字节流,但是最近发现新版的mysql驱动,包括345各版本的最新驱动,用characterEncoding=latin1 参数去访问数据,都会出现问号乱码的问题。
在网上查了一下,有人说是驱动里面自带强制转换,所以出了问题,根据提示看了一下代码,果然在
ResultSetRow在getString的时候,会使用 SingleByteCharsetConverter 来强制转码,发生了问题。
网上说要修改驱动,我自己尝试了一下,既然强制转码里面选择了使用cp1252,那这个字符集应该也是单字符全集,所以我直接尝试用该字符集来连接,问题就解决了。。。。
有两种解决方案:
1. 使用ResultSet中的getBytes方法,直接获取原始bytes数组,自己按照录入时候的编码new String即可。
2. 如果用了框架结构,写了必须获取String的,那么连接参数可以写
characterEncoding=cp1252
程序使用的时候
rs.getString(1).getBytes(“cp1252″)
即可获取原始字节数组,然后也是按照录入编码进行 new String 即可。
注意这种方法可能会引起问题,由于cp1252对一些字节的处理并不是我们理解的那样,比如
MySQL translates 0×81 to Unicode 0×0081, 0x8d to 0x008d, 0x8f to 0x008f, 0×90 to 0×0090, and 0x9d to 0x009d.
如果汉字里面刚好有着3中字节的,就会出问题,显示问号。。。
研究了一下,发了一个bug帖,http://bugs.mysql.com/bug.php?id=64071
估计也是没人理会的了,呵呵,就当练练英文。
我的程序:
con = (Connection) DriverManager
.getConnection(
"jdbc:mysql://1231231231213:3365/origin_chapters?characterEncoding=cp1252",
"bookapp_r", "6c0a3ebf4");
chapter.setChapter_content(new String(rs.getString("Content").getBytes("cp1252"), "gbk"));
下一篇: ajax请求数据渲染页面
推荐阅读
-
UTF-8转GBK编码问题,有什么好的解决方案?
-
PHP解决URL中文GBK乱码问题的两种方法
-
PHP解决URL中文GBK乱码问题的两种方法
-
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
-
解决linux下openoffice word文件转PDF中文乱码的问题
-
UTF-8转GBK编码有关问题,有什么好的解决方案
-
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
-
php中json_encode处理gbk与gb2312中文乱码问题的解决方法,_PHP教程
-
php中json_encode处理gbk与gb2312中文乱码问题的解决方法_PHP
-
php中json_encode处理gbk与gb2312中文乱码问题的解决方法_PHP