漫谈.NET开发中的字符串编码

  阐明:  在《. NET4. 2. 1序列化与流》中, 向大家引见了如何向流中序列化一个对象。 这外面的关键是字符串应该如何编码和解码为二进制数值, 或许通过网络流(NetworkStream)将它们远程发送到另一台计算机上。   在实际开发中, 经常需要将一些字符串写入到文本文件中, NET应用程序中, 通常使用StreamReader或StreamWriter两个类完成这一工作, 比方以下代码将fileContent字串写入到FileName文件中:  由于多数情况下我们都工作在中文Windows下, 而且往往都是某个. NET程序写, 另一个. NET程序读, 所以, 不少. 在特定的场合下,   请看图1:  图1记事本支持的编码方式  默许情况下, Windows记事本以ANSI编码方式保管文件。 记事本将其以ASNI方式保管为“test. txt”, ReadAllText办法翻开“test. txt”文件时, 但中文将显示为乱码。   2理解字符的编码  我们可以做个实验, 使用记事本将“中国ab”这个中英混杂的字符串以不同编码方式保管为多个“. txt”文件, 然后直接检查其二进制内容  图3比对字符编码  以英文字符“a”为例, ANSI和UTF8得到的数值都是“61”, 4个字节, . NET而UTF8则编码为“E4B8ADE59BBD”, 一个汉字占3个字节!这阐明UTF8是一种“变长”的编码,   另外, 我们看到UTF8和Unicode编码(不管是BigEndian还是LittleEndian)前面都有几个标记字符, 称为“BOM(ByteOrderMark, 字节顺序标记)”指明了文本的编码方式, 以下是. NET程序中罕见的字符编码方式的BOM值:  其他的编码方式都可以“依样画葫芦”。   3详解. NET基类库中与字符编码相关的类  前述代码中的Encoding类是. NET完成字符编码解码的中心类型。 Encoding类型提供了UTF8、Unicode等编码和解码器, 调用它的Get系列办法完成编码和解码工作, 以下为示例代码:  运转结果如下:  图5编码和解码  需要留意的是上述二进制值不包括BOM。   事实上, . NET中的StreamWriter默许采用UTF8编码格式编码字符串, 以下是StreamWriter的一个结构函数声明:  这时, StreamWriter会在文件扫尾写入UTF8的BOM标记, 从而让其他的应用程序可以很明确地知道本文件中字符串的编码方式。 它是与“SBCS(single-bytecharacterset, 单字节字符集)”相对应的, SBCS中, 所以能表示的字符数有限, 汉字等特殊字符占有两个字节, 因而, 会代表不同的字符。   我们在MSDN中可以查到一切代码页的编号, 下面列出了能够比拟常用的代码页标识:  5结束语  除了本文所引见的将字符串保管到文本文件的这种场景, 比方. NET提供了一个NetworkStream封装Socket完成网络通讯, 服务端通过读取这个字符串完成特定的工作, 客户端与服务端必需采用分歧的编码方式传送命令, 网络服务就有能够由于无法解析客户端发送过去的数据而Down掉。 我的下一篇文章会引见. NET套接字编程。   好了, 这篇引见字符串编码的短文写完了, 希望本文能对读者有所帮助,   原文链接:  【编辑推荐】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值