前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java - 字符编码

Java - 字符编码

作者头像
雨临Lewis
发布2022-02-14 08:39:11
1.9K0
发布2022-02-14 08:39:11
举报
文章被收录于专栏:雨临Lewis的博客

字符集

字符集是一系列字符的集合,将每个收录的字符和数字进行映射。最早的字符集是ASCII,使用一个字节进行存储字符,8位一共可以表示256个字符,而ASCII只使用了其中的128位,即0~127位,这128位里面包括了常用的英文字符以及标点符号。

一部分不使用英文的字符可以用后面的128位来表示,即128~256位,后面的128位也被称为扩展字符集。但是它表示的字符有限,对于汉字来说,用单字节无法表示完整,因此国标码采用了双字节来表示汉字(即GBK等编码)。

由于不同国家的语言编码不同,互相之间如何通过ASCII进行交流?于是就有了万国码Unicode。Unicode是一个几乎包括了世上所有字符的字符集,每个字符都有一个对应的独一无二的Unicode码,比如聊天时使用的emoji表情字符,GitHub上也可以通过 :grin: 这种写法来输出emoji字符,这个对应的是😁。

因为Unicode使用四个字节来存储,虽然编码效率高,但是会极大浪费存储空间,因此就有了对Unicode字符集进行编码解码的存储方式,如UTF-8等字符编码。字符编码其实就是对Unicode字符集的实现方式,用以约定如何用1~4个字节来存储字符。

字符编码

UTF-8

UTF-8是可变长编码,即多字节编码,在存储不同的字符时使用的字节数量是不同的。比如存储英文字母时只使用1个字节,而存储汉字时则使用3个字节。

UTF-8分为有BOM(Byte Order Marker)和无BOM的两种编码方式,现代文本编辑器在改变文件的编码时应该都看到过这两种编码。

UTF-8的好处是节省了空间,但编码效率降低了,即时间换空间。

UTF-16

UTF-16是双字节编码,属于定长编码。由于使用两个字节为一组来表示一个字符,那么就涉及到了字节顺序的问题,即大端小端的问题。这个是Mac机和PC机对字节顺序的理解不一致导致的历史遗留问题,机器在读取字节顺序时,会从低地址读取,将两个字节中的高位字节放在低地址表示,这就是大端BE,即big-endian。反之就是小端LE,即little-endian。

因此UTF-16存在三种编码:

  • UTF-16BE,使用两个字节进行存储的大端编码。Java就是使用的这个编码来存储字符,中文和英文都是两个字节(即char这个基础数据类型),所以Java是双字节编码。
  • UTF-16LE,使用两个字节进行存储的小端编码。
  • UTF-16,没有指定后缀,即不知道其是大端还是小端,所以需要用四个字节来存储,开始的两个字节表示该字节数组是大端还是小端。即FE FF表示大端,FF FE表示小端。

使用UTF-16的好处是编码效率较高,但浪费存储空间,属于用空间换时间。

不同字符集编码的英文字母和中文汉字的字节数

英文字母:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

编码:GB2312;字节数 : 1 编码:GBK;字节数 : 1 编码:GB18030;字节数 : 1 编码:ISO-8859-1;字节数 : 1 编码:UTF-8;字节数 : 1 编码:UTF-16;字节数 : 4 编码:UTF-16BE;字节数 : 2 编码:UTF-16LE;字节数 : 2

中文汉字:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

编码:GB2312;字节数 : 2 编码:GBK;字节数 : 2 编码:GB18030;字节数 : 2 编码:ISO-8859-1;字节数 : 1 编码:UTF-8;字节数 : 3 编码:UTF-16;字节数 : 4 编码:UTF-16BE;字节数 : 2 编码:UTF-16LE;字节数 : 2

参考链接

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-132,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 字符集
  • 字符编码
    • UTF-8
      • UTF-16
      • 不同字符集编码的英文字母和中文汉字的字节数
      • 参考链接
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档