java中utf8转成gbk,java中GBK转UTF-8乱码的解决方法
java中GBK转UTF-8乱码的解决方法
如果自己采用的是GBK编码,对方采用得到是UTF-8编码,发送数据时需要将GBK编码数据转换成UTF-8编码数据,这样对方才不会乱码。
问题出现:GBK转UTF-8时,奇数个中文会乱码,偶数个中文不会乱码。
原因分析:
public static void analyze() throws UnsupportedEncodingException {String gbk = "我来了";String utf8 = new String(gbk.getBytes("UTF-8"));for (byte b : gbk.getBytes("UTF-8")) {System.out.print(b + " ");}System.out.println();for (byte b : utf8.getBytes()) {System.out.print(b + " ");}}/*-26 -120 -111 -26 -99 -91 -28 -70 -122-26 -120 -111 -26 -99 -91 -28 -70 63 !*/
注意最后一个字节不同,上面一行才是正确的UTF-8编码。那么为什么下面一行最后一个字节是63,而不是-122呢?这就是导致乱码的原因所在。
GBK编码是一个中文2个字节,而UTF-8编码是一个中文3个字节,当我们调用getBytes("UTF-8")方法时,会通过计算来增加字节,使得从GBK的2个字节变成UTF-8对应的3个字节。因此,上例3个中文输出了9个字节。
(相关视频教程分享:java视频教程)
解决问题
保证字节正确才是硬道理。当调用getBytes("UTF-8")转换成字节数组后,创建ISO-8859-1编码的字符串,ISO-8859-1编码是一个字节对应一个字符,因此不会使最后一个字节错误。
public static void correctEncode() throws UnsupportedEncodingException {String gbk = "我来了";String iso = new String(gbk.getBytes("UTF-8"),"ISO-8859-1");for (byte b : iso.getBytes("ISO-8859-1")) {System.out.print(b + " ");}System.out.println();//模拟UTF-8编码的网站显示System.out.println(new String(iso.getBytes("ISO-8859-1"),"UTF-8"));}/*-26 -120 -111 -26 -99 -91 -28 -70 -122我来了*/
java中utf8转成gbk,java中GBK转UTF-8乱码的解决方法相关推荐
- VS中编写Qt项目时,提取ts文件出现中文乱码的解决方法(填坑)
总第84篇 本篇主要总结一个在开发过程中遇到的问题,方便以后参考,也方便后来者可以避免这个坑. 1.问题的产生 一般在做C++开发过程中,都会选择使用Visual Studio+Qt AddIn的环境 ...
- java 转换gbk编码,java中GBK转UTF-8乱码的解决方法
java中GBK转UTF-8乱码的解决方法 如果自己采用的是GBK编码,对方采用得到是UTF-8编码,发送数据时需要将GBK编码数据转换成UTF-8编码数据,这样对方才不会乱码. 问题出现:GBK转U ...
- Java中url传递中文参数取值乱码的解决方法
Java中url传递中文参数取值乱码的解决方法 参考文章: (1)Java中url传递中文参数取值乱码的解决方法 (2)https://www.cnblogs.com/liwenjuan/p/3211 ...
- java.net.url 中文乱码_asp.net URL中包含中文参数造成乱码的解决方法
asp.net URL中包含中文参数造成乱码的解决方法 更新时间:2010年03月08日 21:44:27 作者: 中文乱码一直以来是WEB开发中比较常见的问题之一,对于初学者来说,各种各样的编码 ...
- java utf 8_java utf-8 乱码的解决方法
java utf-8 乱码的解决方法 发布时间:2020-04-28 14:52:16 来源:亿速云 阅读:288 作者:小新 这篇文章主要为大家详细介绍了java utf-8 乱码的解决方法,文中示 ...
- 解决java以UTF-8输出中文时,Excel打开多语言文件乱码但是记事本打开却正常的问题
解决java以UTF-8输出中文时,Excel打开多语言文件乱码但是记事本打开却正常的问题 public static boolean exportCsv(File file, List dataLi ...
- java碰到乱码如何解决方法_如何处理java的乱码
为什么说乱码是中国程序员无法避免的话题呢?这个首先要从编码机制上说起,大家都是中文和英文的编码格式不是一样,解码也是不一样的! 如果中国的程序员不会遇到乱码,那么只有使用汉语编程.汉语编程是怎么回事, ...
- java zhs16gbk_JAVA-----乱码的处理 乱码的解决方法总结
为什么说乱码是程序员无法避免的话题呢?这个首先要从编码机制上说起,大家都是中文和英文的编码格式不是一样,解码也是不一样的!工作遇到各种各样的乱码的解决方法总结一下. 对于Java由于默认的编码方式是 ...
- java显示html乱码怎么解决方法_Java web解决各种乱码问题
首先先明白一下Java web里涉及到编码的地方: 1.jsp编码jsp顶部有两处:charset和pageEncoding charset:服务器发往客户端展现时的编码; pageEncoding: ...
- ubuntu下eclipse打开window下的java文件,注释内容为乱码,解决方法
2019独角兽企业重金招聘Python工程师标准>>> 今天打开了以前的工程,想看看以前写的代码,打开后发现以前的java源文件的注释变成了乱码,于是在google上开始了搜索,得到 ...
最新文章
- ESP32 各种时钟参数值设置
- openstack 调试
- bgp 建立邻居发送的报文_大型网络BGP之IBGP和EBGP邻居关系基础配置
- 错误信息Make an entry in Field Text Area
- 如何实现点击微信内置浏览器返回按钮,返回指定页面,或者原地刷新
- C语言高级编程:汇编分析i++和++i
- 两个链表的第一个公共结点-输入两个链表,找出它们的第一个公共结点。
- cut\grep\sort\tr
- python随机函数random要导入哪个包_python学习之随机函数random
- 等值首尾和-----------2012年12月27日
- [洛谷P5431]【模板】乘法逆元2
- terminated 线程_一个 Java 线程生命周期,我竟然可以扯半小时
- sql server 2012 复制数据库向导出现TransferDatabasesUsingSMOTransfer()异常
- Python 线程 进程 协程
- 翻译: Octave 入门教程
- 数据库查询数据去除重复
- 不忘来时路 心系梦归处
- 关于goole浏览器出现页面崩溃情况的解决
- 微信怎样关闭QQ文件服务器,如何屏蔽QQ和微信的外发文件?
- 【办公实用网站收集】免费模板