首页 > 其他分享 >.Net【基础回顾】Encoding编码

.Net【基础回顾】Encoding编码

时间:2023-06-17 18:15:04浏览次数:41  
标签:编码 Console Unicode Encoding WriteLine Net 字节

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

标签:编码,Console,Unicode,Encoding,WriteLine,Net,字节
From: https://www.cnblogs.com/thomerson/p/17487933.html

相关文章

  • 32. 哈夫曼编码
    一、什么是哈夫曼编码  我们可以用哈夫曼树得到哈夫曼编码,即字符集中每个字符作为一个叶子节点,各个字符出现的频率作为节点的权值,根据上述方法构造哈夫曼树。因为哈夫曼树不唯一,因此哈夫曼编码也不唯一。哈夫曼编码广泛用于数据文件的压缩,其压缩效率通常在20%~90%之间。哈夫......
  • ASP.NET Core MVC 从入门到精通之Identity入门
    随着技术的发展,ASP.NETCoreMVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NETCoreMVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NETCoreMVC系统开发的人员。经过前几篇文章的讲解,初步了解ASP.NETCore......
  • ASP.NET MVC 性能优化和调试
    学习.NETCore应用程序的调试技术可以分为以下步骤:理解基础概念:首先,你需要理解什么是调试以及为什么我们需要调试。理解断点、单步执行、变量监视等基本调试概念。学习VisualStudioCode的调试功能:VisualStudioCode是一个流行的开发环境,它有强大的.NETCore调试支持。......
  • Python 字符编码转换(转载)
    Python字符编码转换1.在python2默认编码是ASCII,python3里默认是unicode2.unicode分为utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节),soutf-16就是现在最常用的unicode版本,不过在文件里存的还是utf-8,因为utf8省空间3.在py3中encode,在转码的同时......
  • CentOS7.9离线部署Kubernetes 1.27.2
    1、节点介绍 ,最小化安装CentOS7.91HostNamevm8649vm8648vm86472IP10.17.86.4910.17.86.4810.17.86.472、配置网络,关闭防火墙,关闭selinux3、安装必备的软件1yuminstallvimgccwgetlrzszbash-completiongperf......
  • .Net Core医学检验LIS系统源码
    .NetCoreLIS系统源码,在第三方快检实验室、二级医院检验科应用5年以上,系统运行稳定、功能齐全,界面布局合理、操作简便。系统采用B/S架构SaaS模式,可扩展性强。LIS系统为实验室服务对象提供检验申请、采集标本、结果查询等功能;为实验室工作人员的核收标本、分送标本、传送资料、分析......
  • .net core 中使用Redis,及Redis问题
    1.安装Microsoft.Extensions.Caching.StackExchangeRedis包2.//分布式缓存  在startup的ConfigureServices中注入redis                               services.AddStackExchangeRedisCache(options=> ......
  • .NET CORE 核心概念:深入理解依赖注入
    1.为什么要用依赖注入(DI)什么是依赖注入,为什么要使用呢?简单通俗说就是一个类需要另一个类来协助工作,就产生了依赖,所以需要的依赖项就要【注入】过来一起来协同完成工作。 软件设计原则中有一个依赖倒置原则(DIP)讲的是要依赖于(1)抽象,不要依赖于具体,(2)高层模块不应该依赖于低层模......
  • jpa2.2.10 JpaSpecificationExecutor Specification 查询时,实体类中存在@OneToMany,怎
    对于这个问题,您可以在查询时通过join()方法指定不查询@OneToMany关联表。举个例子,如果有一个实体A与实体B是一对多关系,那么您可以这样写查询条件:@OneToMany(targetEntity=DcyRightImage.class,cascade={CascadeType.ALL},fetch=FetchType.EAGER)@JoinColumn(nam......
  • netty rpc个人即兴整理
    nettyrpcrpc不通过http,只是使用了tcphttp应用层tcp传输层http不同产品或者不同语言之间最佳解决浪费传输的宽带rpc为什么只用tcp就可以实现,说白了,http就是编码解码用的,我用prc可以自定义编码解码器,不需要通过http实现rpc个人理解,适用于客户端和服务端都是一个产品组开发......