src/DotNetCommon.Core/LuanMaHelper.cs

(开头部分) 8KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using DotNetCommon.Extensions;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace DotNetCommon
{
    /// <summary>
    /// 中文乱码帮助类(GBK or UTF-8)<para></para>
    /// 检测的原理: 将给定的字符串转成unicode数字,如果在常见汉字和符号内则不乱码,否则判定为乱码<para></para>
    /// 当读取可能乱码的字符串时,需要先使用UTF-8读取,检查读取的结果有乱码的时候再用GBK读取,如果首先用GBK读取,那么不太能检查的出来。<para></para>
    /// </summary>
    public class LuanMaHelper
    {
        private static bool _isInitGBK = false;
        /// <summary>
        /// 初始化GBK编码支持
        /// </summary>
        public static void InitGBK()
        {
            if (!_isInitGBK)
            {
                lock (typeof(LuanMaHelper))
                {
                    if (!_isInitGBK)
                    {
                        System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
                        _isInitGBK = true;
                    }
                }
            }
        }

        static LuanMaHelper()
        {
            InitGBK();
        }

        private static Encoding unicode = Encoding.Unicode;
        private static Encoding utf8 = Encoding.UTF8;
        private static Lazy<Encoding> _gbk = new Lazy<Encoding>(() =>
         {
             InitGBK();
             return Encoding.GetEncoding("GBK");
         });
        private static Encoding gbk => _gbk.Value;

        /// <summary>
        /// 是否是正常字符,不正常字符将判别为乱码<br />
        /// emoji表情判为乱码<br />
        /// <seealso href="https://blog.csdn.net/hherima/article/details/9045861"/>
        /// </summary>
        /// <returns></returns>
        public static bool IsNormalChar(char c)
        {
            if (c == '\0') return true;
            var bs = unicode.GetBytes(new[] { c });
            if (bs.Length != 2)
后面还有 185 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。