吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1169|回复: 1
收起左侧

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

[复制链接]
Cool_Breeze 发表于 2021-2-27 14:31
本帖最后由 Cool_Breeze 于 2021-3-30 18:22 编辑



[C#] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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 可以自动释放文件资源

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

打开指定编码文件

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

ReadLine

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

写入指定编码文件

false 覆盖文件 true 追加文件

using (StreamWriter fsWrite = new StreamWriter(NewFileName, false, GBK))

Write

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

完整代码

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();
    }
}

免费评分

参与人数 1热心值 +1 收起 理由
LBWlei + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
Bell520vae 发表于 2021-2-27 16:44
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-30 18:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表