吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

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

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

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



[C#] 纯文本查看 复制代码
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, 2024-11-26 04:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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