• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
樱の泪
博客园    首页    新随笔    联系   管理    订阅  订阅
C#的二进制文件操作及汉字编码转换
1.数值应保存在二进制文件
首先列举文本、二进制文件的操作(读写)方法:
方式1:
 1 //文本文件操作:创建/读取/拷贝/删除
 2 using System;
 3 using System.IO;
 4 class Test 
 5 {
 6    string path = @"f:/t.txt";
 7    public static void Main() 
 8    {       
 9       //创建并写入(将覆盖已有文件)
10       if (!File.Exists(path))
11       {
12 //StreamWriter m=new           
13 //StreamWriter(path,true,Encoding.Default,1);//ASCII,1   Encoding.Default:即//UTF-8编码 这样就可以指定编码方式
14     using (StreamWriter sw = File.CreateText(path))
15          {
16             sw.WriteLine("Hello");
17          } 
18       }
19       //读取文件
20       using (StreamReader sr = File.OpenText(path)) 
21       {
22         string s = "";
23         while ((s = sr.ReadLine()) != null) 
24         {
25            Console.WriteLine(s);
26         }
27      }
28      //删除/拷贝
29      try 
30      {
31         File.Delete(path);
32         File.Copy(path, @"f:/tt.txt");
33      } 
34      catch (Exception e) 
35      {
36         Console.WriteLine("The process failed: {0}", e.ToString());
37      }
38    }
39 }
方式2:
 1 //流文件(二进制)操作
 2 private const string name = "Test.data";
 3 public 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);
20     for (int i = 0; i < 11; i++) 
21     {
22         Console.WriteLine(r.ReadInt32());
23     }
24     w.Close();
25     fs.Close();
在将一系列二进制数如方式1写入到file.txt(二进制)文件后,打开file.txt后显示的数据二进制数有些错误,有些正确。(与存入的不一样)向文件中写入的默认(也可以设置)都是使用UTF-8编码。打开file.txt是也是默认UTF-8编码。
 
若将其如方式2存入二进制文件,则显示的数据一致。若将二进制数(整数)保存为文本文件出错。二进制文件是直接写入文件的(磁盘)没有经过编码和读取时的解码。
 
2.汉字编码转换
相关:
UNICODE是为了处理包括中文,日文等字符而提出的一种通用的字符集。最初的UNICODE为双字节字符集,即16位编码,能够包括65,536个字符。但这样的容量并不能满足所有需要,因此,现在的UNICODE已经扩展到4个字节,能够容纳1,112,064 个字符,而这些在16位之后的扩展背称为增补字符。
 
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 字符集)。这些字节值永远不会表示其他代码点,这一特性使 UTF-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);
posted on 2013-10-26 21:35  樱の泪  阅读(2479)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3