C#中字符串编码处理

所属分类: 软件编程 / C#教程 阅读数: 105
收藏 0 赞 0 分享

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);

更多精彩内容其他人还在看

c#开发word批量转pdf源码分享

已经安装有Office环境,借助一些简单的代码即可实现批量Word转PDF,看下面的实例源码吧
收藏 0 赞 0 分享

c# xml API操作的小例子

这篇文章主要介绍了c# xml API操作的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

c#唯一值渲染实例代码

这篇文章主要介绍了c#唯一值渲染实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

淘宝IP地址库采集器c#代码

这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C#在后台运行操作(BackgroundWorker用法)示例分享

BackgroundWorker类允许在单独的专用线程上运行操作。如果需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用BackgroundWorker类方便地解决问题,下面看示例
收藏 0 赞 0 分享

c#文本加密程序代码示例

这是一个加密软件,但只限于文本加密,加了窗口控件的滑动效果,详细看下面的代码
收藏 0 赞 0 分享

c#生成站点地图(SiteMapPath)文件示例程序

这篇文章主要介绍了c#生成站点地图(SiteMapPath)文件的示例,大家参考使用
收藏 0 赞 0 分享

C# 键盘Enter键取代Tab键实现代码

这篇文章主要介绍了C# 键盘Enter键取代Tab键实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C# WinForm导出Excel方法介绍

在.NET应用中,导出Excel是很常见的需求,导出Excel报表大致有以下三种方式:Office PIA,文件流和NPOI开源库,本文只介绍前两种方式
收藏 0 赞 0 分享

C#串口通信程序实例详解

在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports,创建C#串口通信程序的具体实现是如何的呢?让我们开始吧
收藏 0 赞 0 分享
查看更多