java 转换gbk编码,java中GBK转UTF-8乱码的解决方法
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乱码的解决方法相关推荐
- java.net.url 中文乱码_asp.net URL中包含中文参数造成乱码的解决方法
asp.net URL中包含中文参数造成乱码的解决方法 更新时间:2010年03月08日 21:44:27 作者: 中文乱码一直以来是WEB开发中比较常见的问题之一,对于初学者来说,各种各样的编码 ...
- php 中文截断,PHP中实现中文字串截取无乱码的解决方法
在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码时,一个中文占2个字节, ...
- utf-8编码的中文注释 在 sourceinsight 显示乱码的解决方法---utf8 转gb2312插件
utf-8编码的中文注释 在 sourceinsight 显示乱码的解决方法---utf8 转gb2312插件 参考文章: (1)utf-8编码的中文注释 在 sourceinsight 显示乱码的解 ...
- Activiti保存.png 流程图片文件且解决idea中保存图片时显示中文乱码的解决方法
Activiti保存.png 流程图片文件且解决idea中保存图片时显示中文乱码的解决方法 Eclipse 工具中的操作 流程图片生成的两种方式: 使用 activiti-designer 设计流程图 ...
- JSP中获取HTML中的中文内容是乱码的解决方法---开发中遇到的问题
1.转换字符编码方式 在JSP中,<%=request.getParameter("username")%>应改为: <%=new String(request. ...
- qt编写的android程序在android系统中运行,中文显示乱码的解决方法
在main函数中添加 QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); QTextCodec::setCodecForTr(QTextC ...
- java显示汉字乱码怎么办_java中的汉字显示问号乱码怎么解决
java中的汉字显示问号乱码怎么解决 发布时间:2020-06-23 22:16:38 来源:亿速云 阅读:97 作者:元一 java中的汉字显示问号乱码怎么解决?针对这个问题,今天小编总结了这篇文章 ...
- Linux系统下Java 转换Word到PDF时,结果文档内容乱码的解决方法
本文分享在Linux系统下,通过Java 程序代码将Word转为PDF文档时,结果文档内容出现乱码该如何解决.具体可参考如下内容: 1.问题出现的背景 在Windows系统中,使用Spire.Doc ...
- opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类
opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类 参考文章: (1)opengl中的Floatbuffer和 ...
最新文章
- tensorflow2.0降级及如何从别的版本升到2.0
- mysql innodb表分区
- 在JBOSS中开发SESSIONBEAN和MSGBEAN
- 2.1.1 进位计数制及其相互转换(二进制转八进制和十六进制、十进制小数转二进制数)
- stm32正常运行流程图_stm32软件通信流程图
- 平面分割 题解(1.16 递推模拟)
- 什么是Java文件?
- 突破select的FD_SETSIZE限制
- 当VS2005卸载不干净时
- Java邮件服务学习之一:邮件服务概述
- C# Win32API
- sqlserver 登录失败——孤立用户
- 【渝粤题库】陕西师范大学 《道德教育案例研究》作业
- ZYNQ---PL端扩展串口
- html设置超出两行显示省略号,css 文本两行显示,超出省略号表示
- R学习笔记:《R语言入门与数据分析》
- 磁盘管逻辑卷(LVM)
- 迅雷启动慢 解决方法
- 三星oneui主屏幕费电_三星最新力作,第三方桌面无处遁形,OneUI越来越自由
- 从cocostudio获取控件,添加回调函数