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乱码的解决方法相关推荐

  1. VS中编写Qt项目时,提取ts文件出现中文乱码的解决方法(填坑)

    总第84篇 本篇主要总结一个在开发过程中遇到的问题,方便以后参考,也方便后来者可以避免这个坑. 1.问题的产生 一般在做C++开发过程中,都会选择使用Visual Studio+Qt AddIn的环境 ...

  2. java 转换gbk编码,java中GBK转UTF-8乱码的解决方法

    java中GBK转UTF-8乱码的解决方法 如果自己采用的是GBK编码,对方采用得到是UTF-8编码,发送数据时需要将GBK编码数据转换成UTF-8编码数据,这样对方才不会乱码. 问题出现:GBK转U ...

  3. Java中url传递中文参数取值乱码的解决方法

    Java中url传递中文参数取值乱码的解决方法 参考文章: (1)Java中url传递中文参数取值乱码的解决方法 (2)https://www.cnblogs.com/liwenjuan/p/3211 ...

  4. java.net.url 中文乱码_asp.net URL中包含中文参数造成乱码的解决方法

    asp.net URL中包含中文参数造成乱码的解决方法 更新时间:2010年03月08日 21:44:27   作者: 中文乱码一直以来是WEB开发中比较常见的问题之一,对于初学者来说,各种各样的编码 ...

  5. java utf 8_java utf-8 乱码的解决方法

    java utf-8 乱码的解决方法 发布时间:2020-04-28 14:52:16 来源:亿速云 阅读:288 作者:小新 这篇文章主要为大家详细介绍了java utf-8 乱码的解决方法,文中示 ...

  6. 解决java以UTF-8输出中文时,Excel打开多语言文件乱码但是记事本打开却正常的问题

    解决java以UTF-8输出中文时,Excel打开多语言文件乱码但是记事本打开却正常的问题 public static boolean exportCsv(File file, List dataLi ...

  7. java碰到乱码如何解决方法_如何处理java的乱码

    为什么说乱码是中国程序员无法避免的话题呢?这个首先要从编码机制上说起,大家都是中文和英文的编码格式不是一样,解码也是不一样的! 如果中国的程序员不会遇到乱码,那么只有使用汉语编程.汉语编程是怎么回事, ...

  8. java zhs16gbk_JAVA-----乱码的处理 乱码的解决方法总结

    为什么说乱码是程序员无法避免的话题呢?这个首先要从编码机制上说起,大家都是中文和英文的编码格式不是一样,解码也是不一样的!工作遇到各种各样的乱码的解决方法总结一下. 对于Java由于默认的编码方式是 ...

  9. java显示html乱码怎么解决方法_Java web解决各种乱码问题

    首先先明白一下Java web里涉及到编码的地方: 1.jsp编码jsp顶部有两处:charset和pageEncoding charset:服务器发往客户端展现时的编码; pageEncoding: ...

  10. ubuntu下eclipse打开window下的java文件,注释内容为乱码,解决方法

    2019独角兽企业重金招聘Python工程师标准>>> 今天打开了以前的工程,想看看以前写的代码,打开后发现以前的java源文件的注释变成了乱码,于是在google上开始了搜索,得到 ...

最新文章

  1. ESP32 各种时钟参数值设置
  2. openstack 调试
  3. bgp 建立邻居发送的报文_大型网络BGP之IBGP和EBGP邻居关系基础配置
  4. 错误信息Make an entry in Field Text Area
  5. 如何实现点击微信内置浏览器返回按钮,返回指定页面,或者原地刷新
  6. C语言高级编程:汇编分析i++和++i
  7. 两个链表的第一个公共结点-输入两个链表,找出它们的第一个公共结点。
  8. cut\grep\sort\tr
  9. python随机函数random要导入哪个包_python学习之随机函数random
  10. 等值首尾和-----------2012年12月27日
  11. [洛谷P5431]【模板】乘法逆元2
  12. terminated 线程_一个 Java 线程生命周期,我竟然可以扯半小时
  13. sql server 2012 复制数据库向导出现TransferDatabasesUsingSMOTransfer()异常
  14. Python 线程 进程 协程
  15. 翻译: Octave 入门教程
  16. 数据库查询数据去除重复
  17. 不忘来时路 心系梦归处
  18. 关于goole浏览器出现页面崩溃情况的解决
  19. 微信怎样关闭QQ文件服务器,如何屏蔽QQ和微信的外发文件?
  20. 【办公实用网站收集】免费模板

热门文章

  1. ZYNQ 系统的IEEE1588 实现方法
  2. 电路分压的基本公式忘记了~~
  3. android 上位机下位机串口通讯,上位机下位机串口通信.doc
  4. 一个简单的网页设计HTML5作业
  5. Qt 读写 txt 文件
  6. 浪潮服务器开启远程管理,最新浪潮服务器远程管理(27页)-原创力文档
  7. stm8s003f3使用杂记
  8. 如何重置华为交换机初始密码?
  9. 104协议服务器端,104规约详解.doc
  10. 计算几何之计算三角形的外接圆(三维)