编码问题存在两个方面:JVM之内和JVM之外。
1、Java文件编译后形成class
这里Java文件的编码可能有多种多样,但Java编译器会自动将这些编码按照Java文件的编码格式正确读取后产生class文件,这里的class文件编码是Unicode编码(具体说是UTF-16编码)。
因此,在Java代码中定义一个字符串:
String s="汉字";
不管在编译前java文件使用何种编码,在编译后成class后,他们都是一样的----Unicode编码表示。
2、JVM中的编码

JVM加载class文件读取时候使用Unicode编码方式正确读取class文件,那么原来定义的String s="汉字";在内存中的表现形式是Unicode编码。

ASCII 码 
学过计算机的人都知道 ASCII 码,总共有 128 个,用一个字节的低 7 位表示,0~31 是控制字符如换行回车删除等;32~126 是打印字符,可以通过键盘输入并且能够显示出来。 
ISO-8859-1 
128 个字符显然是不够用的,于是 ISO 组织在 ASCII 码基础上又制定了一些列标准用来扩展 ASCII 编码,它们是 ISO-8859-1~ISO-8859-15,其中 ISO-8859-1 涵盖了大多数西欧语言字符,所有应用的最广泛。ISO-8859-1 仍然是单字节编码,它总共能表示 256 个字符。 
GB2312 
它的全称是《信息交换用汉字编码字符集 基本集》,它是双字节编码,总的编码范围是 A1-F7,其中从 A1-A9 是符号区,总共包含 682 个符号,从 B0-F7 是汉字区,包含 6763 个汉字。 
GBK 
全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95 所制定的新的汉字内码规范,它的出现是为了扩展 GB2312,加入更多的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共有 23940 个码位,它能表示 21003 个汉字,它的编码是和 GB2312 兼容的,也就是说用 GB2312 编码的汉字可以用 GBK 来解码,并且不会有乱码。 
GB18030 
全称是《信息交换用汉字编码字符集》,是我国的强制标准,它可能是单字节、双字节或者四字节编码,它的编码与 GB2312 编码兼容,这个虽然是国家标准,但是实际应用系统中使用的并不广泛。 
UTF-16 
说到 UTF 必须要提到 Unicode(Universal Code 统一码),ISO 试图想创建一个全新的超语言字典,世界上所有的语言都可以通过这本字典来相互翻译。可想而知这个字典是多么的复杂,关于 Unicode 的详细规范可以参考相应文档。Unicode 是 Java 和 XML 的基础,下面详细介绍 Unicode 在计算机中的存储形式。 
UTF-16 具体定义了 Unicode 字符在计算机中存取方法。UTF-16 用两个字节来表示 Unicode 转化格式,这个是定长的表示方法,不论什么字符都可以用两个字节表示,两个字节是 16 个 bit,所以叫 UTF-16。UTF-16 表示字符非常方便,每两个字节表示一个字符,这个在字符串操作时就大大简化了操作,这也是 Java 以 UTF-16 作为内存的字符存储格式的一个很重要的原因。 
UTF-8 
UTF-16 统一采用两个字节表示一个字符,虽然在表示上非常简单方便,但是也有其缺点,有很大一部分字符用一个字节就可以表示的现在要两个字节表示,存储空间放大了一倍,在现在的网络带宽还非常有限的今天,这样会增大网络传输的流量,而且也没必要。而 UTF-8 采用了一种变长技术,每个编码区域有不同的字码长度。不同类型的字符可以是由 1~6 个字节组成。 
UTF-8 有以下编码规则: 
如果一个字节,最高位(第 8 位)为 0,表示这是一个 ASCII 字符(00 - 7F)。可见,所有 ASCII 编码已经是 UTF-8 了。 
如果一个字节,以 11 开头,连续的 1 的个数暗示这个字符的字节数,例如:110xxxxx 代表它是双字节 UTF-8 字符的首字节。 
如果一个字节,以 10 开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节

ASCII码主要是英文编码(单字节编码),只能表示128个字符(足够表示所有英文字符),但是不能满足各国的语言编码,

西欧就推出了 ISO8859-1(也是单字节编码),能用来表示256个字符足够表示所有西欧的语言了。后来推出Unicode编码(univese code)能够满足全世界语言的字符。 中文推出gb2312, 之后又推出gbk 兼容gb2312,

不管.java文件是什么编码,编译成class文件加载到虚拟机中运行都是 以Unicode(utf-16)编码,utf-8,utf-16,utf-32

都是Unicode的实现形式。 utf-8 中文 三个字节,gbk 中文占两个字节。  .java文件中如果用ascii和ISO8859-1保存中文是会报错的,因为它们都是单字节编码,中文大于单字节

ascii,unicod,utf-8Java编码格式相关推荐

  1. ascii码值为负数_作为2020年的程序员,你还在为编码问题困惑?

    如果你是一个生活在2020年的程序员,却不了解字符.字符集.编码和Unicode这些基础知识.那你可要小心了,要是被我抓到你,我会让你在潜水艇里剥六个月洋葱来惩罚你. --来源网络 基本概念科普 为了 ...

  2. 常见的编码格式/txt文件乱码

    常见的编码格式 比较常见的编码格式大体上可以分为ASCII编码和Unicode编码. ASCII编码 ASCII编码:是出现最早的编码格式.属于单字节编码ASCII码使用7bit表示一个字符,共128 ...

  3. ASCII码、Unicode编码对照表 —— ASCII控制字符 Unicode编码 字符编码的前世此生

    ASCII控制字符  Unicode编码 ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字 ...

  4. cmd命令行导出的txt文本文档编码格式转换

    在项目安全策略审查中,c++调用了命令行cmd,执行此命令" secedit /export /cfg  1.txt" 如上图,成功执行. 如下图,在以下目录找到该文件 1.txt ...

  5. win下如何用cmd转换记事本的编码格式

    在打一个小项目的时候, 其中有一个步骤要将中文写入记事本当中,采用的是c++的fstream.写入后打开记事本看了没有问题, 后来打印出来居然都是乱码!也就是说, 出现了编码格式的问题. 查看了下写入 ...

  6. 万字长文总结JAVA几种常见的编码格式和乱码原因分析

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 developer.ibm.com/zh/articles/j-lo-chine ...

  7. 【唐老狮】字符编码(ASCII,Unicode和UTF-8)

    [什么是字符编码] 字符编码(英语:Character encoding)也称字集码 是把字符集中的字符,编码为指定集合中某一对象,以便文本在计算机中存储或通过网络进行传递. 说人话:计算机里只能存数 ...

  8. 深入分析 Java 中的中文编码问题--转

    几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言 ...

  9. 【JAVA编码专题】深入分析 Java 中的中文编码问题

    http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/ 几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么 ...

最新文章

  1. URI、URL以及URN的区别
  2. C# Keywords - is
  3. 工作流技术杂谈 --- 2008
  4. mysql 数值型注入_SQL注入之PHP-MySQL实现手工注入-数字型
  5. 业务id转密文短链的一种实现思路
  6. iTunes是什么意思
  7. [leetcode]84. Largest Rectangle in Histogram c语言
  8. 插入排序,二分查找插入排序,使用二叉树的插入排序
  9. 免费生成十字绣字体_十字绣鞋垫图案 手工鞋垫历史长
  10. 软件开发工具--自考2019年4月
  11. 利用MVC思想和php语言写网站的心得
  12. 中文语料 自动分词、标注词性 工具
  13. 初探腾讯云物联网开发平台loT
  14. html左侧浮动广告代码,纯js网页浮动广告代码
  15. ideaIU-2017.3.4安装破解图文教程详细步骤
  16. 电脑重装win10系统教程,简单易懂,不用U盘直接重装
  17. 一个学计算机的打字速度慢,电脑打字速度慢怎么办
  18. 用Python写一个桌面便签(每日计划本)
  19. 三角波发生器电路图分析
  20. Gronwall 不等式

热门文章

  1. 用命令识别***蛛丝马迹
  2. google chrome浏览器 模拟手机、浏览器访问手机网页
  3. python自动下载安装软件_python3自动下载优酷视频小程序
  4. K8S Calico网络插件
  5. hostapd启动流程(一)
  6. java分享到空间_java 空间
  7. PIM其它特性——IPv6、Anycast RP
  8. 【ZJOI2012】【BZOJ2657】旅游(journey)
  9. 账号登陆界面制作(Axure)
  10. js常见正则验证:邮箱 手机号 电话号码 账号 去掉空格 身份证