.Net【基础回顾】Encoding编码
Encoding编码
先看笔试题目
string strTmp = "a1某某某";
int a = System.Text.Encoding.Default.GetBytes(strTmp).Length;
int b = strTmp.Length;
Console.WriteLine(a);
Console.WriteLine(b);
很多分析人给出的结果
一个字母、数字占一个byte,一个中文占占两个byte,所以a=8,b=5
先了解下Encoding编码有哪些,default又指的哪一个
-
AscII
美国人首先对其英文字符进行了编码,也就是最早的ascii码,用一个字节的低7位来表示英文的128个字符,高1位统一为0
-
128个字符: 所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符
-
常见ASCII码的大小规则:数字< 大写字母 < 小写字母
-
-
GB2312
汉字编码,典型的用2个字节来表示绝大部分的常用汉字,最多可以表示65536个汉字字符
-
Unicode
汉字编码,典型的用2个字节来表示绝大部分的常用汉字,最多可以表示65536个汉字字符
unicode虽然统一了全世界字符的二进制编码,但没有规定如何存储
utf-X是Unicode最重要的实现方式之一
一个英文占2个字节,一个汉字也占2个字节
-
UTF-8
是使用最为广泛的一种UTF格式。属于Unicode的一种变长字符编码,一般使用1-4个字节编码表示一个Unicode字符,即将一个Unicode字符编为1-4个字节组成的UTF8格式,根据不同符号而变化字节长度。
-
UTF-32
使用四个字节来表示存储代码点:把代码点转换为 32 位二进制,位数不够的左边充 0
编码 | 英文数字 | 中文 |
---|---|---|
AscII | 1 | 不支持,存的时候还是1 |
GB2312 | 1 | 2,有些不能显示 |
Unicode | 2 | 2 |
UTF-8 | 1 | 3 |
UTF-32 | 4 | 4 |
再来看看default指的是哪个编码
当前系统设置的“默认字符集编码方式
,可以通过控制面板里面的区域选项设置
也就是设置区域语言的时候会自动选择编码格式
我这选的中文得到的是utf-8
Console.WriteLine(System.Text.Encoding.Default.EncodingName); //Unicode (UTF-8)
很多服务器应该选的都是英文的系统,得到的又是什么呢。。。
⭐不管怎样,不建议使用Encoding.Default
最后回到题目,再想想答案
string str = "a1某某某";
Console.WriteLine("GB2312:" + Encoding.GetEncoding("GB2312").GetBytes(str).Length);
Console.WriteLine("Unicode:" + Encoding.Unicode.GetBytes(str).Length);
Console.WriteLine("UTF8:" + Encoding.UTF8.GetBytes(str).Length);
Console.WriteLine("UTF32:" + Encoding.UTF32.GetBytes(str).Length);
Console.WriteLine("ASCII:" + Encoding.ASCII.GetBytes(str).Length);
// GB2312:8
// Unicode:10
// UTF8:11
// UTF32:20
// ASCII:5
验证
GB2312: 2+3*2=8
Unicode:5*2=10
UTF8:2+3*3=11
UTF8:5*4=20
ASCII: 5