Browse Source

新增文本编码检测

懒得勤快 1 year ago
parent
commit
84e0f756b3

+ 76 - 0
Masuit.Tools.Abstractions/Files/TextEncodingDetector.cs

@@ -0,0 +1,76 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+
+namespace Masuit.Tools.Abstractions.Files;
+
+/// <summary>
+/// 字节文本编码检测
+/// </summary>
+public static class TextEncodingDetector
+{
+    /// <summary>
+    /// 检测文本文件编码
+    /// </summary>
+    /// <param name="file"></param>
+    /// <returns></returns>
+    public static Encoding GetEncoding(string file)
+    {
+        return GetEncoding(new FileInfo(file));
+    }
+
+    /// <summary>
+    /// 检测文本文件编码
+    /// </summary>
+    /// <param name="file"></param>
+    /// <returns></returns>
+    public static Encoding GetEncoding(this FileInfo file)
+    {
+        using var fs = file.OpenRead();
+        return GetEncoding(fs);
+    }
+
+    /// <summary>
+    /// 检测文本流编码
+    /// </summary>
+    /// <param name="stream"></param>
+    /// <returns></returns>
+    public static Encoding GetEncoding(this Stream stream)
+    {
+        var bytes = new byte[4];
+        _ = stream.Read(bytes, 0, 4);
+        return GetEncoding(bytes);
+    }
+
+    private static Encoding GetEncoding(IReadOnlyList<byte> bytes)
+    {
+        if (bytes.Count < 4)
+        {
+            throw new ArgumentException("Byte array is too short");
+        }
+
+        if (bytes[0] == 255 && bytes[1] == 254 && bytes[2] == 0 && bytes[3] == 0)
+        {
+            return Encoding.UTF32;
+        }
+        if (bytes[0] == 254 && bytes[1] == 255 && bytes[2] == 0)
+        {
+            return Encoding.BigEndianUnicode;
+        }
+        if (bytes[0] == 255 && bytes[1] == 254)
+        {
+            return Encoding.Unicode;
+        }
+        if (bytes[0] == 0 && bytes[1] == 0 && bytes[2] == 254 && bytes[3] == 255)
+        {
+            return Encoding.GetEncoding("utf-32BE");
+        }
+        if (bytes[0] == 239 && bytes[1] == 187 && bytes[2] == 191)
+        {
+            return Encoding.UTF8;
+        }
+
+        return Encoding.ASCII;
+    }
+}

+ 2 - 2
Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj

@@ -3,7 +3,7 @@
         <TargetFrameworks>netstandard2.0;netstandard2.1;net461;net5;net6;net7;net8</TargetFrameworks>
         <TargetFrameworks>netstandard2.0;netstandard2.1;net461;net5;net6;net7;net8</TargetFrameworks>
         <LangVersion>latest</LangVersion>
         <LangVersion>latest</LangVersion>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-        <Version>2.6.9.3</Version>
+        <Version>2.6.9.4</Version>
         <Authors>懒得勤快</Authors>
         <Authors>懒得勤快</Authors>
         <Description>全龄段友好的C#万能工具库,码数吐司库,不管你是菜鸟新手还是骨灰级玩家都能轻松上手,Masuit.Tools基础公共库(适用于.NET4.6.1/.NET Standard2.0及以上项目),包含一些常用的操作类,大都是静态类,加密解密,反射操作,Excel简单导出,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展等常用封装。
         <Description>全龄段友好的C#万能工具库,码数吐司库,不管你是菜鸟新手还是骨灰级玩家都能轻松上手,Masuit.Tools基础公共库(适用于.NET4.6.1/.NET Standard2.0及以上项目),包含一些常用的操作类,大都是静态类,加密解密,反射操作,Excel简单导出,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展等常用封装。
             官网教程:https://tools.masuit.org
             官网教程:https://tools.masuit.org
@@ -47,7 +47,7 @@
     </ItemGroup>
     </ItemGroup>
 
 
     <ItemGroup>
     <ItemGroup>
-        <PackageReference Include="AngleSharp" Version="1.1.1" />
+        <PackageReference Include="AngleSharp" Version="1.1.2" />
         <PackageReference Include="AngleSharp.Css" Version="1.0.0-beta.139" />
         <PackageReference Include="AngleSharp.Css" Version="1.0.0-beta.139" />
         <PackageReference Include="Castle.Core" Version="5.1.1" />
         <PackageReference Include="Castle.Core" Version="5.1.1" />
         <PackageReference Include="DnsClient" Version="1.7.0" />
         <PackageReference Include="DnsClient" Version="1.7.0" />

+ 1 - 1
Masuit.Tools.AspNetCore/Masuit.Tools.AspNetCore.csproj

@@ -18,7 +18,7 @@
         <Product>Masuit.Tools.AspNetCore</Product>
         <Product>Masuit.Tools.AspNetCore</Product>
         <PackageId>Masuit.Tools.AspNetCore</PackageId>
         <PackageId>Masuit.Tools.AspNetCore</PackageId>
         <LangVersion>latest</LangVersion>
         <LangVersion>latest</LangVersion>
-        <Version>1.2.9.3</Version>
+        <Version>1.2.9.4</Version>
         <RepositoryType></RepositoryType>
         <RepositoryType></RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
         <FileVersion>1.1.9</FileVersion>
         <FileVersion>1.1.9</FileVersion>

+ 1 - 1
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -6,7 +6,7 @@
 官网教程:https://tools.masuit.org
 官网教程:https://tools.masuit.org
 github:https://github.com/ldqk/Masuit.Tools
 github:https://github.com/ldqk/Masuit.Tools
         </Description>
         </Description>
-        <Version>2.6.9.3</Version>
+        <Version>2.6.9.4</Version>
         <Copyright>Copyright © 懒得勤快</Copyright>
         <Copyright>Copyright © 懒得勤快</Copyright>
         <PackageProjectUrl>https://github.com/ldqk/Masuit.Tools</PackageProjectUrl>
         <PackageProjectUrl>https://github.com/ldqk/Masuit.Tools</PackageProjectUrl>
         <PackageTags>Masuit.Tools,工具库,Utility,Crypt,Extensions</PackageTags>
         <PackageTags>Masuit.Tools,工具库,Utility,Crypt,Extensions</PackageTags>

+ 2 - 2
Masuit.Tools.Excel/Masuit.Tools.Excel.csproj

@@ -3,7 +3,7 @@
         <TargetFramework>netstandard2.0</TargetFramework>
         <TargetFramework>netstandard2.0</TargetFramework>
         <LangVersion>latest</LangVersion>
         <LangVersion>latest</LangVersion>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-        <Version>1.2.9.3</Version>
+        <Version>1.2.9.4</Version>
         <Authors>懒得勤快</Authors>
         <Authors>懒得勤快</Authors>
         <Description>Masuit.Tools.Excel导出库,支持一些简单数据的导出,支持图片列</Description>
         <Description>Masuit.Tools.Excel导出库,支持一些简单数据的导出,支持图片列</Description>
         <Copyright>懒得勤快</Copyright>
         <Copyright>懒得勤快</Copyright>
@@ -38,7 +38,7 @@
       </None>
       </None>
     </ItemGroup>
     </ItemGroup>
     <ItemGroup>
     <ItemGroup>
-        <PackageReference Include="EPPlus" Version="7.0.9" />
+        <PackageReference Include="EPPlus" Version="7.0.10" />
         <PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
         <PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
     </ItemGroup>
     </ItemGroup>
     <ItemGroup>
     <ItemGroup>

+ 3 - 0
Masuit.Tools.Net45/Masuit.Tools.Net45.csproj

@@ -75,6 +75,9 @@
     <Compile Include="..\Masuit.Tools.Abstractions\Files\INIFile.cs">
     <Compile Include="..\Masuit.Tools.Abstractions\Files\INIFile.cs">
       <Link>Files\INIFile.cs</Link>
       <Link>Files\INIFile.cs</Link>
     </Compile>
     </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Files\TextEncodingDetector.cs">
+      <Link>Files\TextEncodingDetector.cs</Link>
+    </Compile>
     <Compile Include="..\Masuit.Tools.Abstractions\Linq\LinqExtension.cs">
     <Compile Include="..\Masuit.Tools.Abstractions\Linq\LinqExtension.cs">
       <Link>Linq\LinqExtension.cs</Link>
       <Link>Linq\LinqExtension.cs</Link>
     </Compile>
     </Compile>

+ 1 - 1
Masuit.Tools.Net45/package.nuspec

@@ -2,7 +2,7 @@
 <package>
 <package>
     <metadata>
     <metadata>
         <id>Masuit.Tools.Net45</id>
         <id>Masuit.Tools.Net45</id>
-        <version>2.6.9.2</version>
+        <version>2.6.9.4</version>
         <title>Masuit.Tools</title>
         <title>Masuit.Tools</title>
         <authors>懒得勤快</authors>
         <authors>懒得勤快</authors>
         <owners>masuit.com</owners>
         <owners>masuit.com</owners>

+ 4 - 1
Masuit.Tools/Masuit.Tools.csproj

@@ -70,6 +70,9 @@
     <Compile Include="..\Masuit.Tools.Abstractions\Files\INIFile.cs">
     <Compile Include="..\Masuit.Tools.Abstractions\Files\INIFile.cs">
       <Link>Files\INIFile.cs</Link>
       <Link>Files\INIFile.cs</Link>
     </Compile>
     </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Files\TextEncodingDetector.cs">
+      <Link>Files\TextEncodingDetector.cs</Link>
+    </Compile>
     <Compile Include="..\Masuit.Tools.Abstractions\Hardware\BiosInfo.cs">
     <Compile Include="..\Masuit.Tools.Abstractions\Hardware\BiosInfo.cs">
       <Link>Hardware\BiosInfo.cs</Link>
       <Link>Hardware\BiosInfo.cs</Link>
     </Compile>
     </Compile>
@@ -221,7 +224,7 @@
       <Version>1.0.0</Version>
       <Version>1.0.0</Version>
     </PackageReference>
     </PackageReference>
     <PackageReference Include="StackExchange.Redis">
     <PackageReference Include="StackExchange.Redis">
-      <Version>2.7.27</Version>
+      <Version>2.7.33</Version>
     </PackageReference>
     </PackageReference>
     <PackageReference Include="System.Text.Json">
     <PackageReference Include="System.Text.Json">
       <Version>8.0.2</Version>
       <Version>8.0.2</Version>

+ 1 - 1
Masuit.Tools/package.nuspec

@@ -2,7 +2,7 @@
 <package>
 <package>
     <metadata>
     <metadata>
         <id>Masuit.Tools.Net</id>
         <id>Masuit.Tools.Net</id>
-        <version>2.6.9.3</version>
+        <version>2.6.9.4</version>
         <title>Masuit.Tools</title>
         <title>Masuit.Tools</title>
         <authors>懒得勤快</authors>
         <authors>懒得勤快</authors>
         <owners>masuit.com</owners>
         <owners>masuit.com</owners>