java中GBK转UTF-8乱码的解决方法

如果自己采用的是GBK编码,对方采用得到是UTF-8编码,发送数据时需要将GBK编码数据转换成UTF-8编码数据,这样对方才不会乱码。

问题出现:GBK转UTF-8时,奇数个中文会乱码,偶数个中文不会乱码。

原因分析:

publicstaticvoidanalyze()throwsUnsupportedEncodingException{

Stringgbk="我来了";

Stringutf8=newString(gbk.getBytes("UTF-8"));

for(byteb:gbk.getBytes("UTF-8")){

System.out.print(b+"");

}

System.out.println();

for(byteb:utf8.getBytes()){

System.out.print(b+"");

}

}

/*

-26-120-111-26-99-91-28-70-122

-26-120-111-26-99-91-28-7063!

*/

注意最后一个字节不同,上面一行才是正确的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编码是一个字节对应一个字符,因此不会使最后一个字节错误。

publicstaticvoidcorrectEncode()throwsUnsupportedEncodingException{

Stringgbk="我来了";

Stringiso=newString(gbk.getBytes("UTF-8"),"ISO-8859-1");

for(byteb:iso.getBytes("ISO-8859-1")){

System.out.print(b+"");

}

System.out.println();

//模拟UTF-8编码的网站显示

System.out.println(newString(iso.getBytes("ISO-8859-1"),"UTF-8"));

}

/*

-26-120-111-26-99-91-28-70-122

我来了

*/

本文转载自中文网

java 转换gbk编码,java中GBK转UTF-8乱码的解决方法相关推荐

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

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

  2. php 中文截断,PHP中实现中文字串截取无乱码的解决方法

    在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码时,一个中文占2个字节, ...

  3. utf-8编码的中文注释 在 sourceinsight 显示乱码的解决方法---utf8 转gb2312插件

    utf-8编码的中文注释 在 sourceinsight 显示乱码的解决方法---utf8 转gb2312插件 参考文章: (1)utf-8编码的中文注释 在 sourceinsight 显示乱码的解 ...

  4. Activiti保存.png 流程图片文件且解决idea中保存图片时显示中文乱码的解决方法

    Activiti保存.png 流程图片文件且解决idea中保存图片时显示中文乱码的解决方法 Eclipse 工具中的操作 流程图片生成的两种方式: 使用 activiti-designer 设计流程图 ...

  5. JSP中获取HTML中的中文内容是乱码的解决方法---开发中遇到的问题

    1.转换字符编码方式 在JSP中,<%=request.getParameter("username")%>应改为: <%=new String(request. ...

  6. qt编写的android程序在android系统中运行,中文显示乱码的解决方法

    在main函数中添加 QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); QTextCodec::setCodecForTr(QTextC ...

  7. java显示汉字乱码怎么办_java中的汉字显示问号乱码怎么解决

    java中的汉字显示问号乱码怎么解决 发布时间:2020-06-23 22:16:38 来源:亿速云 阅读:97 作者:元一 java中的汉字显示问号乱码怎么解决?针对这个问题,今天小编总结了这篇文章 ...

  8. Linux系统下Java 转换Word到PDF时,结果文档内容乱码的解决方法

    本文分享在Linux系统下,通过Java 程序代码将Word转为PDF文档时,结果文档内容出现乱码该如何解决.具体可参考如下内容: 1.问题出现的背景 在Windows系统中,使用Spire.Doc ...

  9. opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类

    opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类 参考文章: (1)opengl中的Floatbuffer和 ...

最新文章

  1. tensorflow2.0降级及如何从别的版本升到2.0
  2. mysql innodb表分区
  3. 在JBOSS中开发SESSIONBEAN和MSGBEAN
  4. 2.1.1 进位计数制及其相互转换(二进制转八进制和十六进制、十进制小数转二进制数)
  5. stm32正常运行流程图_stm32软件通信流程图
  6. 平面分割 题解(1.16 递推模拟)
  7. 什么是Java文件?
  8. 突破select的FD_SETSIZE限制
  9. 当VS2005卸载不干净时
  10. Java邮件服务学习之一:邮件服务概述
  11. C# Win32API
  12. sqlserver 登录失败——孤立用户
  13. 【渝粤题库】陕西师范大学 《道德教育案例研究》作业
  14. ZYNQ---PL端扩展串口
  15. html设置超出两行显示省略号,css 文本两行显示,超出省略号表示
  16. R学习笔记:《R语言入门与数据分析》
  17. 磁盘管逻辑卷(LVM)
  18. 迅雷启动慢 解决方法
  19. 三星oneui主屏幕费电_三星最新力作,第三方桌面无处遁形,OneUI越来越自由
  20. 从cocostudio获取控件,添加回调函数

热门文章

  1. 【Python】选举投票小程序
  2. Office word文档中的乱码解决办法
  3. python 字典处理_python中的字典及其操作
  4. Android获取GPS网络定位经纬度信息
  5. 缓和曲线中线与其平行线间面积的精确推导
  6. KBA高宝印刷机ABB控制器模块维修EC581-ARCNET
  7. Windows挂载EFI分区修改BCD文件
  8. vray 2014的警告框
  9. 网众无盘常见问题解决方案(转)
  10. 怎样记账,如何翻看晨曦记账本