C#中字符串编码处理

 更新时间:2013年03月08日 15:07:55   作者:  
C#中字符串编码处理,需要的朋友可以参考一下

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# NPOI 如何在指定单元格导入导出图片

    c# NPOI 如何在指定单元格导入导出图片

    这篇文章主要介绍了c# NPOI 如何在指定单元格导入导出图片,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-03-03
  • C#编程自学之运算符和表达式

    C#编程自学之运算符和表达式

    这篇文章主要介绍了C#运算符和表达式,这是自学C#编程的第五篇,希望对大家的学习有所帮助。
    2015-10-10
  • C#中深度复制和浅度复制详解

    C#中深度复制和浅度复制详解

    这篇文章主要介绍了C#中深度复制和浅度复制的相关资料,需要的朋友可以参考下
    2015-10-10
  • C#通过子窗体刷新父窗体的实现方法

    C#通过子窗体刷新父窗体的实现方法

    在一些软件,比如,进销存管理系统中添加销售单信息时,每个销售单都可能对应多种商品,而且在向销售单中添加商品时,一般都是在新弹出的窗体中选择商品,这时就涉及通过子窗体刷新父窗体的问题,本文给大家介绍了C#通过子窗体刷新父窗体的实现方法,需要的朋友可以参考下
    2024-04-04
  • 基于WPF简单实现Meesage消息提醒

    基于WPF简单实现Meesage消息提醒

    这篇文章主要介绍了如何利用WPF简单实现Meesage消息提醒,文中的示例代码讲解详细,对我们学习或工作有一定帮助,需要的可以参考一下
    2023-07-07
  • rsa加密算法使用示例分享

    rsa加密算法使用示例分享

    这篇文章主要介绍了rsa加密算法使用示例,代码中有注释,大家参考使用吧
    2014-01-01
  • Unity3D控件Easytouch控制主角移动

    Unity3D控件Easytouch控制主角移动

    这篇文章主要为大家详细介绍了Unity3D控件Easytouch控制主角移动,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • C#实现读取和设置文件与文件夹的权限

    C#实现读取和设置文件与文件夹的权限

    这篇文章主要为大家详细介绍了如何使用C#实现读取和设置文件与文件夹的权限,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • Unity实现圆形Image组件

    Unity实现圆形Image组件

    这篇文章主要为大家详细介绍了Unity实现圆形Image组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C#实现把图片转换成二进制以及把二进制转换成图片的方法示例

    C#实现把图片转换成二进制以及把二进制转换成图片的方法示例

    这篇文章主要介绍了C#实现把图片转换成二进制以及把二进制转换成图片的方法,结合具体实例形式分析了基于C#的图片与二进制相互转换以及图片保存到数据库的相关操作技巧,需要的朋友可以参考下
    2017-06-06

最新评论