最近在处理TXT文件转PDF的功能,由于TXT文件存在的编码太多,所以导致TXT文件上传之后读流后会出现乱码的情况,因此在我们在System.IO.File.ReadAllLines该TXT文件的时候,需要把对应的编码传进入才行。
常见编码的TXT文件
文件编码探测类库
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);
555