import java.io.UnsupportedEncodingException;
import java.util.Arrays;/*编码: 字符变成字节数组解码: 字节数组变成字符串String --> byte[]  :   str.getBytes()byte[] --> String  :   new String(byte[])*/public class EncodeDemo {public static void main(String[] args) throws UnsupportedEncodingException {/*示例一:用相同的字符集编码和解码(UTF-8)*/String str = "你好";byte[] bytes = str.getBytes("UTF-8");  // 用UTF-8字符集将“你好”转换成字节数组System.out.println(Arrays.toString(bytes));  // 打印编码后的字节数组: [-28, -67, -96, -27, -91, -67]str = new String(bytes, "UTF-8");  // 用UTF-8字符集将字节数组转换成字符串System.out.println(str);    // 你好/*示例二:用UTF-8编码,用UTF-8编码,再用ISO8859-1(拉丁字符集)解码,再用ISO8859-1编码,最后用UTF-8解码,可以再转换成相应的中文。注:ISO8859-1没有中文字符集,会将中文字符转换成不能识别的字符,然后可以再通过编码转换成原来的字节数组,再经过UTF-8解码成原有的中文。*/bytes = str.getBytes("UTF-8");  // 用UTF-8字符集将“你好”转换成字节数组System.out.println(Arrays.toString(bytes));  // [-28, -67, -96, -27, -91, -67]str = new String(bytes, "ISO8859-1");  // ISO8859-1字符集会将一个字节转换为一个汉字,但由于此字符集中没有中文,所以会出现乱码的情况System.out.println(str);  // 打印结果:ä½ å¥½bytes = str.getBytes("ISO8859-1");  // 再将转换后的乱码重新编码,此时又会得到原来的字节数组str = new String(bytes, "UTF-8");  // 再经UTF-8解码以后,又会得到原来的汉字System.out.println(str);  // 打印:你好/*示例三:用GBK编码,用UTF-8解码两种字符集都有汉字编码但是GBK字符集一个汉字会转换成两个字节,而UTF-8字符集有可能是一个,有可能是两个,也有可能是三个那么,UTF-8是怎么确定该字符是由一个字节还是两个或者三个字节来组成的呢?它会根据字节数组的标头来判断:(转换成二进制后)'\u0001' 到 '\u007F' 范围内的所有字符都是用单个字节表示的:即第一个字节以0开头,那么该字符由一个字节组成null 字符 '\u0000' 以及从 '\u0080' 到 '\u07FF' 的范围内的字符用两个字节表示:即第一个字节以110开头,且下一个二进制数以10开头,那么该字符由两个字节组成'\u0800' 到 '\uFFFF' 范围内的 char 值用三个字节表示:即第一个字节以111开头,且后两个字节以10开头,那么该字符由三个字节组成*/bytes = str.getBytes("GBK");  // GBK的汉字编码将一个字符转换为两个字节: [-60, -29, -70, -61]System.out.println(Arrays.toString(bytes));  // [-60, -29, -70, -61]str = new String(bytes, "UTF-8");System.out.println(str);  // 打印结果:���// 注:再将错误的字符用UTF-8编码后,并不能再得到原来的数组,因为在最初的解码时,UTF-8字符集会用一个相似的字符去代替不能正确解码的字符,// 所以再用UTF-8编码时并不能再得到原来的字节数组,继而用原有的字符集解码不能再得到原来的汉字bytes = str.getBytes("UTF-8");System.out.println(Arrays.toString(bytes));  // 打印:[-17, -65, -67, -17, -65, -67, -17, -65, -67]str = new String(bytes, "GBK");System.out.println(str);  // 打印: 锟斤拷锟�}
}

java编码问题详解相关推荐

  1. java web编码详解_java web 开发 编码问题详解

    java web 开发 编码问题详解 浏览器 IE/FireFox ------------->Servlet容器-------------------------->显示页面 编码   ...

  2. java中文字符怎么保证出现正确_JAVA中文字符编码问题详解

    JAVA中文字符编码问题详解 JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后,经过极为辛苦的调试和搜索资 ...

  3. (best!)JAVA中文字符编码问题详解

    转载自:http://blog.csdn.net/youyue/article/details/4580402 JAVA中文字符编码问题详解 JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应 ...

  4. JAVA中文字符编码问题详解

    JAVA中文字符编码问题详解 JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后,经过极为辛苦的调试和搜索资 ...

  5. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  6. java拉姆达表达式事例,Java Lambda表达式详解和实例

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...

  7. 4.6 W 字总结!Java 11—Java 17特性详解

    作者 | 民工哥技术之路 来源 | https://mp.weixin.qq.com/s/SVleHYFQeePNT7q67UoL4Q Java 11 特性详解 基于嵌套的访问控制 与 Java 语言 ...

  8. 代码检查规则:Java语言案例详解

    本节课程为<代码检查规则:Java语言案例详解>, 通常情况下Java的代码检查规则可以分为以下十类: 接下来,让我们具体来看看每个分类的内容. 一.源文件规范 该类规范主要从文件名.文件 ...

  9. java nio详解,Java NIO API详解

    Java NIO API详解 在JDK 1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞(blocking)API.对于大多数应用来说,这样的API使用很方 便,然而,一些对 ...

最新文章

  1. R语言可视化包ggplot2绘制排序条形图实战:按照分类因子排序、按照数值排序
  2. linux编译警告不能连接,linux编译警告信息
  3. 计算机组装需要的硬件,组装电脑选择硬件,只要记住2个装机思路,选好硬件配置不是难题...
  4. jQuery 遍历后代
  5. Android中使用广播机制退出多个Activity
  6. #、%和$符号在OGNL表达式中的作用
  7. ibm收购red hat_IBM将收购Red Hat:面向Java的初衷
  8. delphi中指针的用法
  9. 面向多星多任务的大数据处理系统设计
  10. ajax请求接口连不上会报错吗_服务端有异常, 导致: Ajax 请求报错 net::ERR_INCOMPLETE_CHUNKED_ENCODING...
  11. 06Matplotlib数据可视化--6.2散点图
  12. strust2 和 hibernate的整合------登录的实现
  13. 在python中安装python库
  14. EasyRecovery如何添加XML头文件标识
  15. 【首度披露】乐视电商云的整体架构与技术实现
  16. 【Matlab学习笔记】【数学形态学】膨胀、腐蚀、开运算、闭运算、击中击不中变换
  17. matlab 组装刚度矩阵,求整体刚度矩阵matlab程序
  18. 大学四年毕业季我用Python写了一个论文降重工具(希望能帮助到学弟学妹)
  19. 数据挖掘实例1:亲和性分析示例(代码、注释、运行结果)
  20. ppt太大了怎么压缩?

热门文章

  1. micropython移植教程_【教程】智能编程T-Watch手表初试micropython之电子秤教程
  2. Python HTMLCalendar类| 带有示例的formatyearpage()方法
  3. 解放双手!推荐一款阿里开源的低代码工具,YYDS!
  4. JavaScript禁用页面刷新
  5. 有关PHP、HTML单引号、双引号转义以及转成HTML实体的那些事!
  6. 英语笔记:作文:What elective to choose
  7. C语言空指针NULL详解
  8. Kali Linux 2019.4用U盘安装以及解决Kali Linux 2019.4中文乱码问题
  9. python 计量经济 35岁 工作_Python在计量经济与统计学中的应用
  10. c语言 1 %3c%3c -253,结构体嵌套 姓名前后怎么输出两次??