字符串字符编码的思考
事由于 Redis 长度问题引发的,对字符长度的思考
需要注意的是 Redis 的key 与 value 最大长度512M。
对象集合序列化字符串后的字符,存储可能有超出最大长度,想到 一个字符 占多少个字节的思考。
C#中,string使用是unicode字符集utf-16编码存储, 不管中英文,一个字符占两个字节存储;
PS:System.Text.Encoding.Default 取的为当前系统的编码,一般为GB2312中文编码,查看方式可以用 CMD 运行:chcp 。 其936为GB2312
概念基础 |
计算机各种信息都是以 二进制 用0或1代码形式存储的,包括文字,图标,声音,动画。 如:张三 存储为 01000110... 二进制存储 【存储单位】 位:位(bit)是计算机存储的最小单位,每个位存储一个二进制代码。如 1001 1001 每个 0 或者 1 代码 就是一个位。 字节:字节(Byte),由8个位(bit)组成的一个单元,如 1001 1001 就是一个字节。(所以存储文字等数据时,会以使用不同的编码存储方式,得到不同长度的字节) 字:字(Word)代表计算机处理指令或数据的二进制数位数,是 计算机进行数据存储和数据处理的运算的单位,即计算机进行数据处理时一次存取、加工和传送的数据长度。对于32位计算机与64位计算机,字的大小往往不同。 32位计算机:1字=32位(bit)=4字节(Byte),64位计算机:1字=64位(bit)=8字节(Byte) 【文字编码】 编码:从文字到0、1的映射 解码:从0、1到文字的映射 字符:各种 文字 和符号的总称,包括各个中国的文字,标点符号,图形符号,数字等。 字符集:多个字符的集合。字符集种类很多,各个字符集包含的字符个数不同,如 ASCII 字符集,GB2312字符集,Unicode字符集等。 字符编码:也叫 字集码,就是把字符集中的字符编码为指定集合中某个对象,以便再计算机中存储和通讯。如Unicode字符集可以根据需要以UTF-8,UTF-16 等方法进行编码。 |
字符编码 |
ASCII 码:美国信息交换标准码,适用于所有拉丁文字母的单字节编码,使用7位或8位二进制数组来表示128 或 256 个字符。 GBK编码:汉字编码之一,GBK编码兼容GB2312编码。一个汉字用两个字节表示。 BIG-5编码:通行于我国台湾、香港的繁体字编码方案。 Unicode 编码:又称为万国码,定义了世界上几乎所有字符的表示,满足跨语言,平台的进行文本转换和处理的要求,兼容了很多老版本编码规范,如ASCII码。如Unicode可以根据需要以UTF-8,UTF-16 等编码方案进行编码,实现方式称为 Unicode转换格式即UTF。 UFT-8 编码,是互联网上最广泛的Unicode编码的实现方式,是一种变长的编码方式。使用1~4个字节表示一个符号,根据字符集里的不同符号而编号字节长度. |
字节换算 |
字节 byte:8个二进制位(bit)为一个字节(B),最常用的单位,字节也就是B。 1KB (Kilobyte 千字节)=1024B 1MB (Megabyte 兆字节 简称“兆”)=1024KB 1GB (Gigabyte 吉字节 又称“千兆”)=1024MB |
string s="hello world";
Byte[] data = System.Text.Encoding.Unicode.GetBytes(s);
s.Length = 11;//为字符长度
data.Length=22;//为字节长度;byte