.Net【基础回顾】Encoding编码

发布时间 2023-06-17 17:56:57作者: 杏村牧童

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-8 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