专栏首页后端技术张龙netty学习笔记 P45 P46 字符集编码

张龙netty学习笔记 P45 P46 字符集编码

什么是字符集

字符集分为编码和解码两个操作(decode和encode)。

  1. decode将字节转化为字符,是对字节的一种解释方式。
  2. encode将字符转化为字节,是对字符的一种编码。

各种字符集

  1. ASCII 7个字节表示一个字符。会有位缺失(一个字节里最后一个字节没有用)。能表示英文字母、换行符等常用符号
  2. iso-8859-1 8个字节表示一个字符,表示范围包含了ASCII
  3. 中文 中华人民共和国为了应对iso-8859-1无法表示数量繁多的汉字而制定的编码规则。用两个字节表示一个字符。
    1. GB2312 包含大部分汉字。
    2. GBK 表示范围包含了GB2312。包含了一些GB2312没包含的生僻字。
    3. GB18030 表示范围包含了GBK。包含了所有汉字。

  4. 繁体 中国台湾所制定的编码规则。
    1. BIG5 包含繁体字。

  5. unicode 收容了世界上所有语言的文字。每个字符包含两个字节。尽管表示范围广泛,但对于欧美等主要用英文字母交流的国家来说,一个英文字母用两个字节表示会造成极大浪费。原本用iso-8859-1编码为1M大小的英文文本,用unicode编码要占据2M。
    1. big endian与little endian:在文本开头附加两个字节,如果是0xFE FF,标志该文本为大端存储,如果是0xFF FE,表示该文本为小端存储。 比如某个文本为“FF FE 25 4E”,其中“FF FE”表明是小头方式存储,真正的编码是4E25。

  6. utf-8 为了应对unicode对英文存储的极大浪费问题,所制定的不定长编码:英文编码为一个字节,中文大多编码为3个字节,最多可达6个字节
    1. BOM(byte order mask)。在utf-8中的专有名词,作用是标识文本的字节读取顺序,其实就是上文5.1里的big endian与little endian。
    2. BOM的遗留问题:其实在文本头添加BOM可以说是windows发明出来的概念,但这引来了兼容性问题:因为utf-8编码在linux中是默认不带有BOM的,而在windows是默认带有BOM的。这使得文本在linux与windows之间拷贝后,无法读取。 也正因为如此,额外引申出"utf-8 without BOM"这个编码,显示指定文本编码不带有BOM

char

char在Java中是16位的,因为Java用的是Unicode。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JAVA JVM JRE JDK

    https://stackoverflow.com/questions/11547458/what-is-the-difference-between-jvm-...

    平凡的学生族
  • 操作系统 考试 各大名词解释

    平凡的学生族
  • Task 7 FCN README

    This is a fully-connected network(8 strides) implementation on the dataset ADE20...

    平凡的学生族
  • Java字节码增强探秘

    Java之所以可以“一次编译,到处运行”,一是因为JVM针对各种操作系统、平台都进行了定制,二是因为无论在什么平台,都可以编译生成固定格式的字节码(.class...

    zhisheng
  • 前端工程师也应知道的字符编码知识

    最开始计算机只在美国用,八位的字节可以组合出256种不同状态。0-32种状态规定了特殊用途,一旦终端、打印机遇上约定好的这些字节被传过来时,就要做一些约定的动作...

    coder_koala
  • C#字符串(字节)的长度

    顺便看一下Sql Server中char nchar varchar  nvarchar

    aehyok
  • IO流 秦始皇与编码的故事

    IO的故事可以从2000多年前的始皇帝开始讲起。自从秦始皇统一六国以后,书同文,车同轨,统一货币度量衡,简单的说就是制定了一个统一的标准。而与本章有最大关系的就...

    用户5745563
  • JAVA——Base64编解码原理及AES加解密算法的使用

    Base64编码原理:将要编码的二进制(字符串、图片等都可以转换成二进制格式表示)把3个8位字节以4个6位的字节表示,然后把每个6位字节都转换成一个单独的数字并...

    良月柒
  • mysql入门 — (2)

    Mister24
  • java字节和字符的区别

    Java采用unicode来表示字符,java中的一个char是2个字节,一个中文或英文字符的unicode编码都占2个字节,但如果采用其他编码方式,一个字符占...

    说故事的五公子

扫码关注云+社区

领取腾讯云代金券