C#的⼆进制⽂件操作及汉字编码转换
1.数值应保存在⼆进制⽂件
⾸先列举⽂本、⼆进制⽂件的操作(读写)⽅法:
⽅式1:
1//⽂本⽂件操作:创建/读取/拷贝/删除
2using System;
3using System.IO;
4class Test
5 {
6string path = @"f:/t.txt";
7public static void Main()
二进制编码转换
8    {
9//创建并写⼊(将覆盖已有⽂件)
10if (!File.Exists(path))
11      {
12//StreamWriter m=new
13//StreamWriter(path,true,Encoding.Default,1);//ASCII,1  Encoding.Default:即//UTF-8编码这样就可以指定编码⽅式14using (StreamWriter sw = File.CreateText(path))
15          {
16            sw.WriteLine("Hello");
17          }
18      }
19//读取⽂件
20using (StreamReader sr = File.OpenText(path))
21      {
22string s = "";
23while ((s = sr.ReadLine()) != null)
24        {
25            Console.WriteLine(s);
26        }
27      }
28//删除/拷贝
29try
30      {
31        File.Delete(path);
32        File.Copy(path, @"f:/tt.txt");
33      }
34catch (Exception e)
35      {
36        Console.WriteLine("The process failed: {0}", e.ToString());
37      }
38    }
39 }
⽅式2:
1//流⽂件(⼆进制)操作
2private const string name = "Test.data";
3public static void Main(String[] args)
4 {
5//打开⽂件()  ,或通过File创建⽴如:fs = File.Create(path, 1024)
6    FileStream fs = new FileStream(name, FileMode.CreateNew);
7//转换为字节写⼊数据(可写⼊中⽂)
8    Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
9//字节数组,字节偏移量,最多写⼊的字节数
10 BinaryWriter  w  =  new  BinaryWriter(fs);
11//设置要写⼊的偏移量
12 fs.Position=fs.Length;
13//  fs.Write(info, 0, info.Length);  这个也可以
14    w.Close();
15    fs.Close();
16//打开⽂件
17    fs = new FileStream(name, FileMode.Open, FileAccess.Read);
18//读取
19    BinaryReader r = new BinaryReader(fs);
20for (int i = 0; i < 11; i++)
21    {
22        Console.WriteLine(r.ReadInt32());
23    }
24    w.Close();
25    fs.Close();
在将⼀系列⼆进制数如⽅式1写⼊到(⼆进制)⽂件后,打开后显⽰的数据⼆进制数有些错误,有些正确。(与存⼊的不⼀样)向⽂件中写⼊的默认(也可以设置)都是使⽤UTF-8编码。打开是也是默认UTF-8编码。
若将其如⽅式2存⼊⼆进制⽂件,则显⽰的数据⼀致。若将⼆进制数(整数)保存为⽂本⽂件出错。⼆进制⽂件是直接写⼊⽂件的(磁盘)没有经过编码和读取时的解码。
2.汉字编码转换
相关:
UNICODE是为了处理包括中⽂,⽇⽂等字符⽽提出的⼀种通⽤的字符集。最初的UNICODE为双字节字符集,即16位编码,能够包括65,536个字符。但这样的容量并不能满⾜所有需要,因此,现在的UNICODE已经扩展到4个字节,能够容纳1,112,064 个字符,⽽这些在1 6位之后的扩展背称为增补字符。
UTF-32、UTF-16 和 UTF-8 是 Unicode 标准的编码字符集的字符编码⽅案。
UTF-8 使⽤⼀⾄四个字节的序列对编码 Unicode 代码点进⾏编码
UTF-8 使⽤⼀⾄四个字节的序列对编码 Unicode 代码点进⾏编码。U+0000 ⾄ U+007F 使⽤⼀个字节编码,U+0080 ⾄ U+07FF 使⽤两个字节,U+0800 ⾄ U+FFFF 使⽤三个字节,⽽ U+10000 ⾄ U+10FFFF 使⽤四个字节。UTF-8 设计原理为:字节值 0x00 ⾄ 0x7F 始终表⽰代码点 U+0000 ⾄ U+007F(Basic Latin 字符⼦集,它对应 ASCII 字符集)。这些字节值永远不会表⽰其他代码点,这⼀特性使 UT F-8 可以很⽅便地在软件中将特殊的含义赋予某些 ASCII 字符。
 GB2312(1980年)⼀共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围⾼字节从B0-F7,低字节从A1-FE,占⽤的码位是72*94=6768。其中有5个空位是D7FA-D7FE。当然也可以表⽰数字和字符(⼀个字节,与ASCII表⽰相同)。
要读取⼀个以GB2312编码的包含汉字、数字、字母的⼆进制⽂件。
String strName =Encoding.GetEncoding("gb2312").GetString(name,0,i) ;
// name是读取的⼆进制数组。
这样就能将⼆进制数组转换为汉字、数字或字母
同样:也可以将包含汉字、数字、字母的字符串转换为⼆进制数组保存到⼆进制⽂件。
String unicodeString =  "备⽤43E";
Byte[] encodedBytes = Encoding.GetEncoding("gb2312").GetBytes(unicodeString);
当然也可以进⾏⼆进制数组与UNICODE,UTF-8等编码⽅式的转换
Byte[] encodedBytes = utf8.GetBytes(unicodeString);
String decodedString = utf8.GetString(encodedBytes);
UnicodeEncoding unicode = new UnicodeEncoding();
Byte[] encodedBytes = unicode.GetBytes(unicodeString);
String decodedString = unicode.GetString(encodedBytes);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。