Skip to content

Latest commit

 

History

History
59 lines (33 loc) · 1.44 KB

字符编码.md

File metadata and controls

59 lines (33 loc) · 1.44 KB

字符编码

  • 中文简体字符集 GBK

中文和英文都采用两个字节, 比 GB2312 更全

  • 中文繁体字符集 Big5

  • 统一字符集(万国码) unicode

unicode 字符编码兼容 ascii 编码, 有 3 中标准:

  1. utf-8

采用变长字符编码, 最短一个字节(ascii 字符), 最长 6 个字节

  1. utf-16

也是变长字符编码, 大部分是两个字节, 少数为 4 个字节
utf-16 中占用四个字节字符: é

采用 utf-16 编码的计算机语言单个字符无法存储 4 个字节字符的情况, 只能存储 2 个字节

  1. utf-32

采用 4 个字节的编码方式, 但是大部分字符的很多位都是 0, 编码效率不高

字符集

编程语言中的字符集

  • c/c++

中字符默认为 utf-8 单个字节. L"" 前缀 L 便是 unicode(utf-16) 字符编码

  • java, c#, javascript/typescript

java, c# 中 char 和 String 均为 unicode(utf-16) 编码

  • go

go 中默认 string 为 utf-8 编码, rune 表示 unicode(utf-16) 编码字符

string 如果想要支持随机访问需要转化为[]rune 切片才可以

func change(s string, index int) rune {
    ss := []rune(s)
    return ss[index]
}
  • python

pytohn3 采用灵活存储的方式, 取决于字符串中最长 unicode 码点, 对于 ascii 字符, 每个字符用一个字节表示; 对于基本多平面(BMP)内, 采用两个字节表示; 对于超出基本多平面内, 采用 4 个字节

存储和网络传输最佳方式

utf-8 编码