服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#中字符串编码处理

C#中字符串编码处理

2020-12-19 15:32C#菜鸟教程 C#

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

 

C#中字符串编码处理

关于GB2312的解释:http://www.zzvips.com/article/88120.html

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

 

C#中字符串编码处理

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#C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    这篇文章主要介绍了C#设计模式之Strategy策略模式解决007大破密码危机问题,简单描述了策略模式的定义并结合加密解密算法实例分析了C#策略模式的具体使用...

    GhostRider10972022-01-21
  • C#如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    这篇文章主要给大家介绍了关于如何使用C#将Tensorflow训练的.pb文件用在生产环境的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴...

    bbird201811792022-03-05
  • C#SQLite在C#中的安装与操作技巧

    SQLite在C#中的安装与操作技巧

    SQLite,是一款轻型的数据库,用于本地的数据储存。其优点有很多,下面通过本文给大家介绍SQLite在C#中的安装与操作技巧,感兴趣的的朋友参考下吧...

    蓝曈魅11162022-01-20
  • C#VS2012 程序打包部署图文详解

    VS2012 程序打包部署图文详解

    VS2012虽然没有集成打包工具,但它为我们提供了下载的端口,需要我们手动安装一个插件InstallShield。网上有很多第三方的打包工具,但为什么偏要使用微软...

    张信秀7712021-12-15
  • C#深入理解C#的数组

    深入理解C#的数组

    本篇文章主要介绍了C#的数组,数组是一种数据结构,详细的介绍了数组的声明和访问等,有兴趣的可以了解一下。...

    佳园9492021-12-10
  • C#三十分钟快速掌握C# 6.0知识点

    三十分钟快速掌握C# 6.0知识点

    这篇文章主要介绍了C# 6.0的相关知识点,文中介绍的非常详细,通过这篇文字可以让大家在三十分钟内快速的掌握C# 6.0,需要的朋友可以参考借鉴,下面来...

    雨夜潇湘8272021-12-28
  • C#利用C#实现网络爬虫

    利用C#实现网络爬虫

    这篇文章主要介绍了利用C#实现网络爬虫,完整的介绍了C#实现网络爬虫详细过程,感兴趣的小伙伴们可以参考一下...

    C#教程网11852021-11-16
  • C#C#微信公众号与订阅号接口开发示例代码

    C#微信公众号与订阅号接口开发示例代码

    这篇文章主要介绍了C#微信公众号与订阅号接口开发示例代码,结合实例形式简单分析了C#针对微信接口的调用与处理技巧,需要的朋友可以参考下...

    smartsmile20127762021-11-25