Board logo

标题: C# 学习笔记 字符串编码转换 [打印本页]

作者: Gin_Q    时间: 2021-3-1 21:36     标题: C# 学习笔记 字符串编码转换

  1. using System;
  2. using System.IO;
  3. using System.Text;
  4. using System.Collections.Generic;
  5. class FR
  6. {
  7.     static void Main(){
  8.         string path = @"D:\GIN\c#\Exercise\笔记2.txt";
  9.         string path2 = @"D:\GIN\c#\Exercise\测试.txt";
  10.         // string path1 = @"D:\GIN\c#\Exercise\笔记2.txt";
  11.          
  12.         // 检查文件是否存在
  13.         if (File.Exists(path)){
  14.             Console.WriteLine("文件已经存在:" + path);
  15.             /* 异常处理语句
  16.             if (!File.Exists(path1)){
  17.                 try{
  18.                     // 复制文件
  19.                     File.Copy(path, path1);
  20.                 }
  21.                 catch (IOException e){
  22.                     // 输出错误信息
  23.                     Console.WriteLine(e);
  24.                 }
  25.                 finally{
  26.                     // 覆盖原有文件
  27.                     File.Copy(path, path1, true);
  28.                     // 加密文件
  29.                     // File.Encrypt(path1);
  30.                 }
  31.                  
  32.             } */
  33.             // 创建一个指定编码的空文件
  34.             StreamWriter test = new StreamWriter(path2, false, Encoding.GetEncoding("GB2312"));
  35.             
  36.             // 写入文件
  37.             foreach (string line in File.ReadLines(path)){
  38.                 // Console.WriteLine(line);
  39.                 test.WriteLine(UTF8ConvertGB2312(line, "utf-8", "GB2312"));
  40.             }
  41.             
  42.         }
  43.         Console.WriteLine("Done");
  44.         Console.ReadLine();
  45.     }
  46.     static string UTF8ConvertGB2312(string str, string srcCoding, string desCoding){
  47.         // 将字符串按指定编码,解码成字节数组
  48.         byte[] barr = Encoding.GetEncoding(srcCoding).GetBytes(str);
  49.         // 将解码好的字节数组,按原编码转换为指定编码的字节数组;
  50.         barr = Encoding.Convert(Encoding.GetEncoding(srcCoding), Encoding.GetEncoding(desCoding), barr);
  51.         // 将转换好的字节数组,按指定编码,解码为字符串!
  52.         return Encoding.GetEncoding(desCoding).GetString(barr);
  53.     }
  54.      
  55.      
  56.     static string GB2312ConvertUTF8(string str){
  57.         // 将字符串按指定编码,解码成字节数组
  58.         byte[] barr = Encoding.GetEncoding("GB2312").GetBytes(str);
  59.         // 将解码好的字节数组,按原编码转换为指定编码的字节数组;
  60.         barr = Encoding.Convert(Encoding.GetEncoding("GB2312"), Encoding.GetEncoding("utf-8"), barr);
  61.         // 将转换好的字节数组,按指定编码,解码为字符串!
  62.         return Encoding.GetEncoding("utf-8").GetString(barr);
  63.     }
  64. }
复制代码

作者: slimay    时间: 2021-3-2 00:51

回复 1# Gin_Q
用C# 太安逸
作者: Gin_Q    时间: 2021-3-2 19:37

本帖最后由 Gin_Q 于 2021-3-2 19:47 编辑

回复 2# slimay

遍历整个目录!是真的快!
  1. using System;
  2. using System.Text;
  3. using System.IO;
  4. class FindFileByExtension
  5. {
  6.     static void Main(string[] args)
  7.     {
  8.         // Console.WriteLine(args.Length);
  9.         
  10.         // 所有文件信息储存文件 utf-8
  11.         string log = @"D:\GIN\c#\Exercise\log.csv";
  12.         
  13.         // 创建一个指定编码的空文件
  14.         StreamWriter Log = new StreamWriter(log, false, Encoding.GetEncoding("GB2312"));
  15.         
  16.         string startFolder = @"D:\";
  17.         // 指定不可访问的目录
  18.         string[] skipList = {@"$RECYCLE.BIN", @"System Volume Information"};
  19.         DirectoryInfo dir = new DirectoryInfo(startFolder);
  20.         
  21.         int count = 0;
  22.         foreach (var each in dir.GetDirectories())
  23.         {
  24.             // 查询是否包含不可访问目录
  25.             if (each.FullName.Contains(skipList[0]) || each.FullName.Contains(skipList[1]))
  26.             {
  27.                 Console.WriteLine("跳过指定目录:{0}",each.FullName);   
  28.                 continue;
  29.             }
  30.             
  31.             DirectoryInfo eachDir = new DirectoryInfo(each.FullName);
  32.             // 在搜索操作中包括当前目录和所有它的子目录。 此选项在搜索中包括重解析点,比如安装的驱动器和符号链接。
  33.             foreach (System.IO.FileInfo fi in eachDir.GetFiles("*.*", System.IO.SearchOption.AllDirectories))
  34.             {
  35.                 count++;
  36.                 // Console.WriteLine("{0},{1},{2}",count, fi.FullName, fi.Length);
  37.                 Log.WriteLine(CodeConvert(String.Format("{0},{1},{2}",count, fi.FullName, fi.Length), "utf-8", "GB2312"));
  38.                 // Log.WriteLine("{0},{1},{2}",count, fi.FullName, fi.Length);
  39.             }
  40.         }
  41.     }
  42.    
  43.     static string CodeConvert(string str, string srcCoding, string desCoding)
  44.     {
  45.         // 将字符串按指定编码,解码成字节数组
  46.         byte[] barr = Encoding.GetEncoding(srcCoding).GetBytes(str);
  47.         // 将解码好的字节数组,按原编码转换为指定编码的字节数组;
  48.         barr = Encoding.Convert(Encoding.GetEncoding(srcCoding), Encoding.GetEncoding(desCoding), barr);
  49.         // 将转换好的字节数组,按指定编码,解码为字符串!
  50.         return Encoding.GetEncoding(desCoding).GetString(barr);
  51.     }
  52. }
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2