Cool_Breeze 发表于 2021-2-27 14:31

C# 学习笔记 字符串编码转换

本帖最后由 Cool_Breeze 于 2021-3-30 18:22 编辑



using System;
using System.IO;
using System.Text;
using System.Collections.Generic;

class FR
{
    static void Main(){
      string path = @"D:\GIN\c#\Exercise\笔记2.txt";
      string path2 = @"D:\GIN\c#\Exercise\测试.txt";
      // string path1 = @"D:\GIN\c#\Exercise\笔记2.txt";
      
      // 检查文件是否存在
      if (File.Exists(path)){
            Console.WriteLine("文件已经存在:" + path);
            /* 异常处理语句
            if (!File.Exists(path1)){
                try{
                  // 复制文件
                  File.Copy(path, path1);
                }
                catch (IOException e){
                  // 输出错误信息
                  Console.WriteLine(e);
                }
                finally{
                  // 覆盖原有文件
                  File.Copy(path, path1, true);
                  // 加密文件
                  // File.Encrypt(path1);
                }
               
            } */
            // 创建一个指定编码的空文件
            StreamWriter test = new StreamWriter(path2, false, Encoding.GetEncoding("GB2312"));
            
            // 写入文件
            foreach (string line in File.ReadLines(path)){
                // Console.WriteLine(line);
                test.WriteLine(UTF8ConvertGB2312(line, "utf-8", "GB2312"));
            }
            
      }
      Console.WriteLine("Done");
      Console.ReadLine();
    }
    static string UTF8ConvertGB2312(string str, string srcCoding, string desCoding){
      // 将字符串按指定编码,解码成字节数组
      byte[] barr = Encoding.GetEncoding(srcCoding).GetBytes(str);
      // 将解码好的字节数组,按原编码转换为指定编码的字节数组;
      barr = Encoding.Convert(Encoding.GetEncoding(srcCoding), Encoding.GetEncoding(desCoding), barr);
      // 将转换好的字节数组,按指定编码,解码为字符串!
      return Encoding.GetEncoding(desCoding).GetString(barr);
    }
   
   
    static string GB2312ConvertUTF8(string str){
      // 将字符串按指定编码,解码成字节数组
      byte[] barr = Encoding.GetEncoding("GB2312").GetBytes(str);
      // 将解码好的字节数组,按原编码转换为指定编码的字节数组;
      barr = Encoding.Convert(Encoding.GetEncoding("GB2312"), Encoding.GetEncoding("utf-8"), barr);
      // 将转换好的字节数组,按指定编码,解码为字符串!
      return Encoding.GetEncoding("utf-8").GetString(barr);
    }
}# 文件编码转换

## 打开文件

使用 **using** 可以自动释放文件资源

```c#
using (StreamReader fsRead = new StreamReader(FileName, Encoding.UTF8)){操作文件}
```

## 打开指定编码文件

```c#
using (StreamReader fsRead = new StreamReader(FileName, Encoding.UTF8)){}
```

### ReadLine

不包含换行符 **\r\n** **\n**

## 写入指定编码文件

**false** 覆盖文件 **true** 追加文件

```c#
using (StreamWriter fsWrite = new StreamWriter(NewFileName, false, GBK))
```

### Write

记得添加换行符 **\r\n** **\n**

## 完整代码

```c#
using System;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
      string strLine;
      string FileName = "ReGex.txt";
      string NewFileName = "NewReGex.txt";
      
      Encoding GBK = Encoding.GetEncoding(936);

      using (StreamReader fsRead = new StreamReader(FileName, Encoding.UTF8))
      {
            using (StreamWriter fsWrite = new StreamWriter(NewFileName, false, GBK))
            {               
                do
                {
                  strLine = fsRead.ReadLine();
                  if (strLine == null) break;
                  fsWrite.Write(strLine + "\r\n");
                }while(true);
            }
      }
      Console.WriteLine("完成");
      Console.ReadKey();
    }
}
```

Bell520vae 发表于 2021-2-27 16:44

页: [1]
查看完整版本: C# 学习笔记 字符串编码转换