为了解决各个国家因为本地化字符编码带来的影响 , 把全世界所有的符号统一进行编码-Unicode编码;此时某一个字符在全世界任何地方都是固定的 , 比如字符:'哥' , 在任何地方都是以十六进制的54E5来表示 。Unicode的每个编码字符都占有2个字节大小 。
常见的字符集:
- ASCII:每个字符占一个字节 , 只能包含128个符号 , 不能表示汉字;
- ISO-8859-1:每个字符占一个字节 , 收录西欧语言 , 不能表示汉字;
- ANSI:每个字符占两个字节 , 在简体中文的操作系统中 , ANSI 就指的是 GB2312;
- GB2312/GBK/GB18030:每个字符占两个字节 , 中文专用编码;
- UTF-8:是一种针对Unicode的可变长度字符编码 , 又称万国码 , 是Unicode的实现方式之一 , 目前的应用率最高;
- UTF-8 BOM:是微软搞出来的编码 , 默认占3个字节 , 使用率并不高;
互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码 。
存储字母 , 数字和汉字
存储字母和数字时无论是什么字符集都只占1个字节(因为和ASCII兼容) , 但是存储汉字:GBK家族占两个字节 , UTF-8家族占3个字节 。
存储中文时 , GBK和UTF-8都是OK的 。
import java.util.Arrays;/** * 字符编码 */public class EncodingDemo {public static void main(String[] args) throws Exception {String str = "老夫不正经";// 以特定编码格式编码字符串byte[] data = https://www.isolves.com/it/cxkf/yy/JAVA/2020-05-03/str.getBytes("UTF-8");System.out.println(Arrays.toString(data));// 解码字符串str = new String(data, "ISO-8859-1");System.out.println(str);// 此时 , 字符串str是乱码:???laquo;??ccedil;?// 解决方案便是 , 使用ISO-8859-1来读取字节数据 , 然后使用UTF-8重新编码data = str.getBytes("ISO-8859-1");System.out.println(Arrays.toString(data));str = new String(data, "UTF-8");System.out.println(str);}}
小结
- InputStream 和 OutputStream
- Reader 和 Writer
- 文件过滤器
- 字节流
- 字符流
- 缓冲区
- 资源关闭
- 缓冲流
- 转换流
- 内存流
- 合并流
- 字符编码
【JAVA字节流、字符流、缓冲流、转换流、内存流、字符编码】
推荐阅读
- 爱国的6字名言 爱国名言短句5~6字
- 鲁滨孙漂流记读后感 鲁滨孙漂流记读后感400字
- 北京的老字号,个个都藏着一道名菜
- 奥迪尾部的“数字+TFSI”代表什么意思?
- 试用期工作总结800字范文 实习期个人工作总结
- Java 如何利用钩子函数实现优雅停服?刨根问底
- 五分钟看穿Java并发相关概念,并发原来如此简单
- JavaScript、Ajax、jQuery全部知识点,1分钟速懂!
- 身份证号码18位数字都代表什么含义?
- 细黑发亮的红茶叫什么名字?[红茶]