C#中字符串编码处理
时间:2023-10-03 09:56:12
GB2312是简体中文系统的标准编码 用“区” 跟“位”的概念表示 称之为区位码
区指代大的范围 位相当于偏移量。
每个汉字占两个字节
高位字节”的范围是0xB0-0xF7,“低位字节”的范围是0xA1-0xFE。
它的规律好像是按拼音a到z的顺序排列的
“啊”字是GB2312之中的第一个汉字,它的区位码就是1601
为此我们现在用代码的方式输出一个汉字
c#下是little字节序 b0跑后面去了。
ushort u = 0xa1b0;
byte[] chs =BitConverter.GetBytes(u);
Console.Write(Encoding.GetEncoding("GB2312").GetString(chs));
屏幕上输出的是汉字“啊”
但是注意并不代表 写个循环从0xbA1 到0xf7fe就可以输出所有的汉字,这个很简单比如高位从1到9 低位从1到9 只有81种组合。
并不代表99-11就是结果 这么二的问题 晕。实际上通过这种方式汉字的个数总共是6768个,理解了区位码的概念后你就知道怎样去处理gb2312的汉字编码了。
下面我们就用这种方式来输出所有的汉字
//gb2312
//B0-F7,低字节从A1-FE
//byte hi = 0xB0;
//byte lo = 0xA1;
for (byte i = 0xB0; i <= 0xF7; i++)
{
for (byte j = 0xA1; j <= 0xFE; j++)
{
//byte t = (byte)(j | (byte)0x01);
Console.Write(Encoding.GetEncoding("GB2312").GetString(new byte[] { i, j }));
}
}
关于GB2312的解释:https://www.jb51.net/article/34630.htm
ASCII是美国信息交换标准码 他是从0~127,一个字节8位最高是255 就是说一个字节都用不完。
GB2312里也有字母 称之为全角字符 ,gb2312里也包括ascii码称之为半角字符。
全角字符看上去怪怪的 感觉有点不一样 就像这样 全角: A半角:A 全角:a 半角:a
全角字符除了在文字系统里用到没什么实际作用。
全角字符的第一个字节总是被置为163,而第二个字节则是相同半角字符码加上128(不包括空格)。
如半角A为65,则全角A则是163(第一个字节)、193(第二个字节,128+65)。
知道这个规律 那么我们也可以遍历处所有ascii对应的全角字符:
/**
*实际上,全角字符的第一个字节总是被置为163,
*而第二个字节则是相同半角字符码加上128(不包括空格)。
*如半角A为65,则全角A则是163(第一个字节)、193(第二个字节,128+65)。
*/
for (byte k = 0x00; k < 0x7f; k++)
{
byte[] ch = new byte[2];
ch[0] = 163;
ch[1] = (byte)(128 + k);
Console.Write(Encoding.GetEncoding("GB2312").GetString(ch));
}
winXp下文本文件默认的保存编码是ansi ,注意 这个ansi 他的概念跟GB2312又有不同,除此之外还有unicode 、utf-8
他们之间的关系是:
不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。
这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。
在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码
C#进行文本读取时新同学最容易出现不理解为什么文本文件读取时是乱码
StreamReader sr = new StreamReader(Application.StartupPath + @"\config.txt");
string line;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
因为读取的方式 也就是解码的方式跟文本存储时不一样,所以初始化streamReader时最好指定编码,Default即ANSI
StreamReader sr = new StreamReader(Application.StartupPath + @"\config.txt", System.Text.Encoding.Default);
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
JAVA图片水印开发案例详解
![](https://img.aspxhome.com/file/2023/9/129989_0s.jpg)
基于Spring Boot不同的环境使用不同的配置方法
解决Mybatis-Plus操作分页后数据失效问题
使用Feign扩展包实现微服务间文件上传
![](https://img.aspxhome.com/file/2023/5/63085_0s.jpg)
C#将PDF转为多种图像文件格式的方法(Png/Bmp/Emf/Tiff)
![](https://img.aspxhome.com/file/2023/9/74819_0s.jpg)
c#之利用API函数实现动画窗体的方法详解
浅谈Spring框架中@Autowired和@Resource的区别
![](https://img.aspxhome.com/file/2023/6/96096_0s.png)
C#使用WebService结合jQuery实现无刷新翻页的方法
Java使用Redisson分布式锁实现原理
![](https://img.aspxhome.com/file/2023/1/68141_0s.png)
Java中管理资源的引用队列相关原理解析
java实现猜字母游戏
SpringBoot+Elasticsearch实现数据搜索的方法详解
Android保持屏幕常亮2种实现方法
Java Map.values()方法之如何获取Map集合中的所有键值对象
两个例子了解java中的回调机制
![](https://img.aspxhome.com/file/2023/3/80903_0s.jpg)
Spring Cache简单介绍和使用大全
![](https://img.aspxhome.com/file/2023/3/60063_0s.png)