当前位置: 首页 > article >正文

通过C#将GB18030编码转义为UTF-8

使用C#代码,对于GB18030编码转义为UTF-8格式。

using System.Text;public class FileEncodingConverter
{// 支持转换的文件扩展名列表(可根据需求扩展)private static readonly string[] SupportedExtensions = { ".sln", ".cpp", ".h", ".txt", ".csv", ".log", ".json", ".xml", ".html", ".css", ".js" };public static void ConvertFolderToUTF8(string folderPath){try{// 遍历文件夹及其子文件夹中的所有文件foreach (var file in Directory.EnumerateFiles(folderPath, "*", SearchOption.AllDirectories)){var ext = Path.GetExtension(file).ToLower();if (SupportedExtensions.Contains(ext)){try{ConvertFileToUTF8(file);}catch (Exception ex){Console.WriteLine($"Error processing {file}: {ex.Message}");}}}Console.WriteLine("所有支持的文件已转换为 UTF-8 编码!");}catch (Exception ex){Console.WriteLine($"程序异常:{ex.Message}");}}private static void ConvertFileToUTF8(string filePath){// 检测文件编码var detectedEncoding = DetectEncoding(filePath);if (detectedEncoding == null){throw new Exception("无法检测文件编码");}// 读取文件内容string content = File.ReadAllText(filePath, detectedEncoding);// 保存为UTF-8(无BOM)File.WriteAllText(filePath, content, new UTF8Encoding(false));Console.WriteLine($"成功转换:{filePath}");}private static Encoding DetectEncoding(string path){using (var reader = new BinaryReader(File.OpenRead(path))){byte[] bytes = reader.ReadBytes(4); // 读取前4字节// 检查UTF-8 BOMif (bytes.Length >= 3 && bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF){return Encoding.UTF8;}// 检查UTF-16 BOM(虽然用户可能不需要,但完整检测)if (bytes.Length >= 2 && (bytes[0] == 0xFF && bytes[1] == 0xFE) || (bytes[0] == 0xFE && bytes[1] == 0xFF)){return Encoding.Unicode;}// 无BOM,尝试检测为GB18030或UTF-8// 尝试用GB18030解码前100字节,若无异常则认为是GB18030Encoding gb18030 = Encoding.GetEncoding("GB18030");try{using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read)){byte[] sample = new byte[100];stream.Read(sample, 0, 100);gb18030.GetChars(sample); // 触发解码}return gb18030;}catch (DecoderFallbackException){// GB18030解码失败,尝试UTF-8Encoding utf8 = Encoding.UTF8;try{using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read)){byte[] sample = new byte[100];stream.Read(sample, 0, 100);utf8.GetChars(sample); // 触发解码}return utf8;}catch (DecoderFallbackException){// 无法确定,返回默认编码(如系统默认)return Encoding.Default;}}}}// 程序入口public static void Main(){// 步骤1:注册编码提供者(必须在首次使用编码前调用)Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);// 步骤2:使用GB18030编码Encoding gb18030 = Encoding.GetEncoding("GB18030");#region 加载包测试byte[] bytes = gb18030.GetBytes("你好,世界!");string text = gb18030.GetString(bytes);Console.WriteLine(text);#endregionstring folderPath = "dir";ConvertFolderToUTF8(folderPath);}
}

相关文章:

通过C#将GB18030编码转义为UTF-8

使用C#代码,对于GB18030编码转义为UTF-8格式。 using System.Text;public class FileEncodingConverter {// 支持转换的文件扩展名列表(可根据需求扩展)private static readonly string[] SupportedExtensions { ".sln", ".…...

《TCP/IP网络编程》学习笔记 | Chapter 23:IOCP

《TCP/IP网络编程》学习笔记 | Chapter 23:IOCP 《TCP/IP网络编程》学习笔记 | Chapter 23:IOCP通过重叠 I/O 理解 IOCPepoll 和 IOCP 的性能比较实现非阻塞模式的套接字以纯重叠 I/O 方式实现回声服务器端重新实现客户端测试从重叠 I/O 模型到 IOCP 模型…...

Java学习打卡-Day25-注解和反射、Class类

注解(JDK5引入) 什么是注解? Java注解(Annotation),也叫元数据。一种代码级别的说明,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面&#xf…...

电感、互感器、变压器和磁珠综合对比——《器件手册--电感/线圈/变压器/磁珠篇》

三、电感/线圈/变压器/磁珠 名称 定义 特点...

CAD导入arcgis中保持面积不变的方法

1、加载CAD数据,选择面数据,如下: 2、加载进来后,右键导出数据,导出成面shp数据,如下: 3、选择存储路径,导出面后计算面积,如下: 4、与CAD中的闭合线面积核对…...

rustdesk自建服务器怎么填写客户端配置信息

目录 # id、api、中继都怎么填?rustdesk程序启动后服务不自动启动 # id、api、中继都怎么填? rustdesk程序启动后服务不自动启动 完全退出RudtDesk程序(右下角托盘区有的话,需要右键点退出) 创建windows服务&#xff…...

c++进阶之----智能指针

1.概念 在 C 中,智能指针是一种特殊的指针类型,它封装了裸指针(raw pointer)的行为,并通过 RAII(Resource Acquisition Is Initialization,资源获取即初始化)机制自动管理动态分配的…...

六、测试分类

设计测试用例 万能公式:功能测试性能测试界面测试兼容性测试安全性测试易用性测试 弱网测试:fiddler上行速率和下行速率 安装卸载测试 在工作中: 1.基于需求文档来设计测试用例(粗粒度) 输入字段长度为6~15位 功…...

Apollo源码总结

官方课程 项目源码 源码库简介: 1.apollo:算法库 2.apollo-kernel:改进LINUX内核。添加实时性补丁。 3. apollo-platform:改进ROS系统。去中心化,增加共享内存通信方式,兼容protobuf。 4.apollo-contrib&am…...

电感详解:定义、作用、分类与使用要点

一、电感的基本定义 电感(Inductor) 是由导线绕制而成的储能元件,其核心特性是阻碍电流变化,将电能转化为磁能存储。 基本公式: 自感电动势: E -L * (di/dt) (L:电感值&#xff0c…...

AI编程案例拆解|基于机器学习XX评分系统-前端篇

文章目录 1. 定价使用DeepSeek估价小红书调研 2. 确定工作事项利用DeepSeek生成具体工作事项 3. 和客户沟通约会议沟通确定内容样式 4. 前端部分设计使用DeepSeek生成UI设计在Cursor中生成并提问前置条件开始编程 关注不迷路,励志拆解100个AI编程、AI智能体的落地应…...

java数组06:Arrays类

Arrays类 数组的工具类java.util. Arrays 由于数组对象本身并没有什么方法可以供我们调用,但API中是了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作。 查看JDK帮助文档 Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用…...

TQTT_KU5P开发板教程---实现流水灯

文档实现功能介绍 本文档是学习本开发板的基础,通过设置计数器使led0到led7依次闪烁,让用户初步认识vivado基本的开发流程以及熟悉项目的创建。本开发板的所有教程所使用的软件都是vivado2024.1版本的。可以根据网上的教程下载与安装。 硬件资源 此次教程…...

Model Context Protocol(MCP)模型上下文协议

Model Context Protocol(MCP)模型上下文协议 前言一、什么是MCP二、MCP的作用三、MCP与Function call对比四、构建一个简单的MCP DEMO环境准备实现MCP Server运行 ServerMCP Client端配置验证 总结 前言 在Agent时代,将Agent确立为大模型未来…...

第十二章:FreeRTOS多任务创建与删除

FreeRTOS多任务创建与删除教程 概述 本教程介绍FreeRTOS多任务的创建与删除方法,主要涉及两个核心函数: 任务创建:xTaskCreate()任务删除:vTaskDelete() 实践步骤 1. 准备工程文件 复制005工程并重命名为006 2. 创建多个任务…...

Seed-Thinking-v1.5:字节豆包新推理模型发布,200B参数战胜Deepseek

摘要 本文引入了Seed-Thinking-v1.5,能够在响应之前通过思考进行推理,从而提高了各种基准测试的性能。Seed-Thinking-v1.5在AIME 2024上获得86.7分,在Codeforces上获得55.0分,在GPQA上获得77.3分,展示了优秀的STEM和编…...

C#.NET模拟用户点击按钮button1.PerformClick自动化测试

PerformClick英文词是什么意思,几个词组成 PerformClick 是一个由两个英文单词组成的合成词,下面为你分别解释每个部分的含义以及整个词在编程语境中的意义: 单个单词含义 Perform:它是一个动词,读音为 /pəˈfɔːm/&#xff…...

微服务之间调用外键“翻译”的方法概述

写在前面的话&#xff1a;减少strean流操作&#xff0c;减少多层嵌套for循环。使用普通for循环和map的方式进行转换&#xff0c; 第一步查询数据 List<Student> findList studentDao.findList(findMap); 第二步准备遍历和赋值 if(CollectionUtil.isNotEmpty(findLis…...

AIDD-人工智能药物设计-提升分子预测反事实解释可靠性

UQ 过滤:提升分子预测反事实解释可靠性 目录 I-INF 指标结合 F1 评分,为评估大分子复合物(包括 RNA-蛋白质)的界面相互作用网络提供了可靠且全面的新方法。通过使用生成的人工 CAR 序列微调蛋白质语言模型(PLM),显著提高了 CAR-T 细胞活性的预测准确性,有效克服了合成蛋…...

软件界面设计:打造用户喜爱的交互体验

在数字化飞速发展的当下&#xff0c;软件已渗透进生活的各个角落&#xff0c;从日常使用的社交、购物软件&#xff0c;到专业领域的办公、设计软件&#xff0c;其重要性不言而喻。而软件界面作为用户与软件交互的桥梁&#xff0c;直接决定了用户对软件的第一印象与使用体验。出…...

【前端】webpack一本通

今日更新完毕&#xff0c;不定期补充&#xff0c;建议关注收藏点赞。 目录 简介使用webpack默认只能处理js文件 ->引入加载器对JS语法降级&#xff0c;兼容低版本语法合并文件再次打包进阶 工作原理html-webpack-plugin插件webpack开发服务器引入使用webpack-dev-server模块…...

代码学习总结(一)

代码学习总结&#xff08;一&#xff09; 这个系列的博客是记录下自己学习代码的历程&#xff0c;有来自平台上的&#xff0c;有来自笔试题回忆的&#xff0c;主要基于 C 语言&#xff0c;包括题目内容&#xff0c;代码实现&#xff0c;思路&#xff0c;并会注明题目难度&…...

DeepSeek在应急救援领域的应用解决方案

DeepSeek在应急救援领域的应用解决方案 一、引言 1.1 应急救援领域现状 近年来&#xff0c;我国应急管理工作全面加强&#xff0c;取得了显著成效。然而&#xff0c;一系列重特大灾害事故暴露出我国应急管理体系存在诸多问题短板。例如&#xff0c;在责任落实、应急处突、法…...

第十五届蓝桥杯C/C++B组省赛真题讲解(分享去年比赛的一些真实感受)

试题A——握手问题 一、解题思路 直接用高中学的排列组合思路 二、代码示例 #include<bits/stdc.h> using namespace std; int fun(int n) {int sum0;for(int i0;i<n;i){for(int ji1;j<n;j)sum; } return sum; } int main() {cout<<fun(50)-fun(7); }三、…...

【Qt】qDebug() << “中文测试“; 乱码问题

环境 Qt Creator版本&#xff1a;4.7.1 编译器&#xff1a;MSVC2015_32bit 解法一 在.pro文件中添加 msvc:QMAKE_CXXFLAGS -execution-charset:utf-8注意&#xff1a; 1、需要清理项目&#xff0c;并重新qmake&#xff0c;然后构建。 测试项目下载&#xff1a;https://do…...

Koordinator-NodeSLO

Reconcile() 获取node和nodeSLO&#xff0c;设置nodeExist和nodeSLOExistnode和nodeSLO都不存在&#xff0c;直接返回若!nodeExist 删除对应nodeSLO 若!nodeSLOExist 初始化nodeSLO创建nodeSLO 若nodeExist和nodeSLOExist都存在 获取nodeSLOSpec&#xff0c;若nodeSLOSpec改变…...

Vue接口平台学习六——接口列表及部分调试页面

一、实现效果图及界面布局简单梳理 整体布局分左右&#xff0c;左边调试&#xff0c;右边显示接口列表 左侧&#xff1a; 一个输入框按钮&#xff1b;下面展示信息&#xff0c;大部分使用代码编辑器就好了&#xff0c;除了请求体传文件类型需要额外处理。然后再下方显示响应信…...

2025年消防设施操作员考试题库及答案

一、多选题 31.区域报警系统主要由&#xff08;&#xff09;等组成。 A.火灾探测器 B.手动火灾报警按钮 C.火灾声光警报器 D消防联动控制器 E.区域型火灾报警控制器 答案&#xff1a;ABCE 解析&#xff1a;根据《基础知识》第215页&#xff0c;“消防联动控制器”一项可…...

【C语言】预处理(下)(C语言完结篇)

一、#和## 1、#运算符 这里的#是一个运算符&#xff0c;整个运算符会将宏的参数转换为字符串字面量&#xff0c;它仅可以出现在带参数的宏的替换列表中&#xff0c;我们可以将其理解为字符串化。 我们先看下面的一段代码&#xff1a; 第二个printf中是由两个字符串组成的&am…...

深入理解全排列算法:DFS与回溯的完美结合

全排列问题是算法中的经典问题&#xff0c;其目标是将一组数字的所有可能排列组合列举出来。本文将详细解析如何通过深度优先搜索&#xff08;DFS&#xff09;和回溯法高效生成全排列&#xff0c;并通过模拟递归过程帮助读者彻底掌握其核心思想。 问题描述 给定一个正整数 n&a…...