如何使用C#将DOC转TXT并转换UTF-8实体为十六进制NCR序列
在C#中实现DOC转TXT并将UTF-8字符转换为十六进制NCR序列
我来给你分享一个实用的实现方案,刚好能覆盖你提到的两个需求——先把DOC文档转成TXT格式,再自动将文本中的非ASCII UTF-8字符转换成&#xXXXX;格式的十六进制NCR序列。
第一步:DOC转TXT格式
要处理DOC文件,最常用的方式是借助Microsoft.Office.Interop.Word组件(需要先在项目中安装对应的NuGet包:Microsoft.Office.Interop.Word)。下面是实现代码,注意要正确释放COM对象,避免Word进程残留:
using Microsoft.Office.Interop.Word; using System.IO; public static void ConvertDocToTxt(string docFilePath, string txtOutputPath) { // 创建Word应用实例,设置为后台运行 Application wordApp = new Application { Visible = false }; Document doc = null; try { // 打开目标DOC文档 doc = wordApp.Documents.Open(docFilePath); // 将文档保存为纯文本格式 doc.SaveAs2(txtOutputPath, WdSaveFormat.wdFormatText); Console.WriteLine($"DOC转TXT完成,输出路径:{txtOutputPath}"); } finally { // 释放资源,必须确保COM对象被正确关闭 doc?.Close(); wordApp.Quit(); // 手动释放COM对象,避免进程残留 System.Runtime.InteropServices.Marshal.ReleaseComObject(doc); System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp); } }
如果不想依赖Office组件,也可以用第三方库比如DocX(NuGet包:DocX),它更轻量且不需要安装Office,适合服务器环境:
using Novacode; using System.IO; public static void ConvertDocToTxtWithoutOffice(string docFilePath, string txtOutputPath) { using (DocX doc = DocX.Load(docFilePath)) { string textContent = doc.Text; File.WriteAllText(txtOutputPath, textContent, Encoding.UTF8); Console.WriteLine($"DOC转TXT完成,输出路径:{txtOutputPath}"); } }
第二步:将UTF-8字符转换为十六进制NCR序列
接下来处理文本内容,把非ASCII的UTF-8字符转换成&#xXXXX;格式。核心逻辑是遍历每个字符,判断是否为ASCII字符(Unicode值≤127),如果不是就获取其十六进制Unicode码,拼接成NCR格式:
using System.Text; public static string ConvertToHexNcr(string inputText) { StringBuilder result = new StringBuilder(); foreach (char c in inputText) { // 只转换非ASCII字符(Unicode值大于127) if (c > 127) { // 格式化为4位十六进制,大写,拼接成NCR序列 string hexCode = ((int)c).ToString("X4"); result.Append($"&#x{hexCode};"); } else { // ASCII字符直接保留 result.Append(c); } } return result.ToString(); }
整合两个功能
把上面两个步骤结合起来,实现从DOC到处理好NCR序列的TXT的完整流程:
public static void ProcessDocToNcrTxt(string docFilePath, string finalTxtOutputPath) { // 第一步:先转成临时TXT string tempTxtPath = Path.Combine(Path.GetDirectoryName(docFilePath), "temp_output.txt"); ConvertDocToTxt(docFilePath, tempTxtPath); // 第二步:读取临时TXT内容,转换NCR string originalText = File.ReadAllText(tempTxtPath, Encoding.UTF8); string ncrText = ConvertToHexNcr(originalText); // 第三步:保存最终处理后的TXT File.WriteAllText(finalTxtOutputPath, ncrText, Encoding.UTF8); // 删除临时文件(可选) File.Delete(tempTxtPath); Console.WriteLine($"处理完成,最终文件路径:{finalTxtOutputPath}"); }
测试示例
输入文本:
Isto é um teste. Eu não me importo com o que você pensa. Você acha que me conhece muito bem.
经过处理后输出:
Isto é um teste. Eu não me importo com o que você pensa. Você acha que me conhece muito bem.
完全符合你给出的示例要求~
内容的提问来源于stack exchange,提问作者Tamal Banerjee
相关产品推荐
相关产品推荐

