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

Java--编码问题

作者头像
SuperHeroes
发布2018-05-22 16:21:12
8680
发布2018-05-22 16:21:12
举报
文章被收录于专栏:云霄雨霁

常见的编码格式:

ASCII码

总共有128个,用一个字节的低七位表示,0~31是控制字符如换行、回车、删除等,32~126是打印字符。

ISO-8859-1

扩展了ASCII码,但仍然是单字节编码,总共能表示256个字符。

GB2312

全称《信息技术  中文编码字符集》,是双字节编码。总的编码范围是A1~A7,其中A1~A9是符号区,总共包含682个符号;B0~F7是汉字区,包含6763个汉字。

GBK

全称《汉字内码扩展规范》。扩展了GB2312, 它的编码范围是8140~FEFE(去掉XX7F), 总共有23940个码位,能表示21003个汉字。它的编码是和GB2312兼容的。

UTF-16

UTF-16具体定义了Unicode字符在计算机中的存取方法。UTF-16用两个字节表示Unicode的转化格式,它采用定长的表示方法,即不论什么字符都可以用两个字符表示。Java使用UTF-16作为内存的字符存储格式。

UTF-8

UTF-16统一采用两个字节来表示一个字符,虽然简单方便,但会造成空间浪费。UTF-8采用变长技术,每个编码区域有不同的字码长度。不同类型的字符可以由1~6个字节组成。

UTF-8编码规则:

  • 如果是一个字节,最高位为0,表示这是一个ASCII字符;
  • 如果是一个字节,以11开头,则连续的1的个数暗示这个字符的字节数,例如110xxxxx代表它是双字节UTF-8字符的首字节;
  • 如果是一个字节,以10开头,表示它不是首字节。

Java中需要编码的场景:

I/O操作中存在编码

Reader和Writer是字符流,InputStream和OutputStream是字节流。而InputStreamReader和OutputStreamWriter是关联字节到字符的桥梁。

内存操作中存在编码

Java中提供了Charset类,该类中的encode()和decode()方法分别对应char[]到byte[]的编码和byte[]到char[]的编码:

代码语言:javascript
复制
Charset charset = Charset.forName("UTF-8");
ByteBuffer byteBuffer = charset.encode(string);
CharBuffer charBuffer = charset.decode(byteBuffer);

Java中还提供了ByteBuffer类,该类可以实现char到byte的软转换,它的转换不需要编码和解码,只是把一个16bit的char拆分成了2个8bit的byte。它们的实际值没有被修改,仅仅是数据类型做了转换。

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

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

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

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

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