最近在处理TXT文件转PDF的功能,由于TXT文件存在的编码太多,所以导致TXT文件上传之后读流后会出现乱码的情况,因此在我们在System.IO.File.ReadAllLines该TXT文件的时候,需要把对应的编码传进入才行。

常见编码的TXT文件
20201123150209.png

文件编码探测类库
UDE.CSharp
在VS中使用Nuget工具安装此包即可(搜索关键词:ude)

使用示例

public static void Main(String[] args)
{
    string filename = args[0];
    using (FileStream fs = File.OpenRead(filename)) {
        Ude.CharsetDetector cdet = new Ude.CharsetDetector();
        cdet.Feed(fs);
        cdet.DataEnd();
        if (cdet.Charset != null) {
            Console.WriteLine("Charset: {0}, confidence: {1}", 
                 cdet.Charset, cdet.Confidence);
        } else {
            Console.WriteLine("Detection failed.");
        }
    }
}    

使用代码,判断TXT编码类型来使用相应的编码流来读取。

var lang = Encoding.Default;
using (var fs = System.IO.File.OpenRead(filePath)) 
{
    var cadet = new Ude.CharsetDetector();
    cadet.Feed(fs);
    cadet.DataEnd();
    if (cadet.Charset != null) 
    {
        if (cadet.Charset.ToLower().Contains("utf")) 
        {
            lang = Encoding.UTF8;
        }
        if (cadet.Charset.ToLower().Contains("gb")) 
        {
            lang = Encoding.GetEncoding("gb2312");
        }
        if (cadet.Charset.ToLower().Contains("shift")) 
        {
            lang = Encoding.GetEncoding("Shift-JIS");
        }
    }
}
var lines = System.IO.File.ReadAllLines(filePath, lang);
最后修改:2022 年 06 月 17 日 10 : 20 AM
如果觉得我的文章对你有用,请随意赞赏