首页 > 编程语言 >C# Unicode编码解码

C# Unicode编码解码

时间:2022-09-30 09:58:34浏览次数:49  
标签:unicodeStr string C# 解码 strResult Unicode return newStr

Unicode是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

 

在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符。在 基本多文种平面里的所有字符,要用四位十六进制数;在零号平面以外的字符则需要使用五位或六位十六进制数了。

 

string str = @"\u0005 \u0002\U00f3 \U +e9\u00e9";
string newStr = UnicodeDecode(str);
Console.WriteLine(newStr);
Console.WriteLine();

newStr = ToUnicode("0 - * @ , 。 ? 真的 繁體字");
Console.WriteLine(newStr);
Console.WriteLine();

正常字符转换为unicode

 /// 

        /// 对正常的字符串转换为 Unicode 的字符串
        /// 

        /// 正常的字符串
        /// 是否忽略空格符;默认 true 空格符不转换;false 空格符要转换
        /// 是否大写U字母 ‘\U';默认 false ‘\u'
        /// 
        public string ToUnicode(this string normalStr, bool isIgnoreSpace = true, bool isUpperCaseU = false)
        {
            if (string.IsNullOrEmpty(normalStr))
            {
                return string.Empty;
            }

            StringBuilder strResult = new StringBuilder();

            void func(int index)
            {
                if (isUpperCaseU)
                {
                    strResult.Append("\\U");
                }
                else
                {
                    strResult.Append("\\u");
                }
                strResult.Append(((int)normalStr[index]).ToString("x").PadLeft(4, '0'));
            }

            for (int i = 0; i < normalStr.Length; i++)
            {
                if (isIgnoreSpace)
                {
                    if (normalStr[i] == ' ')
                    {
                        strResult.Append(" ");
                    }
                    else
                    {
                        func(i);
                    }
                }
                else
                {
                    func(i);
                }
            }
            return strResult.ToString();
        }

解码

/// 

        /// 对 Unicode 的字符串解码
        /// 

        /// Unicode 字符串
        /// 
        public string UnicodeDecode(string unicodeStr)
        {
            if (string.IsNullOrWhiteSpace(unicodeStr) || (!unicodeStr.Contains("\\u") && !unicodeStr.Contains("\\U")))
            {
                return unicodeStr;
            }

            string newStr = Regex.Replace(unicodeStr, @"\\[uU](.{4})", (m) =>
            {
                string unicode = m.Groups[1].Value;
                if (int.TryParse(unicode, System.Globalization.NumberStyles.HexNumber, null, out int temp))
                {
                    return ((char)temp).ToString();
                }
                else
                {
                    return m.Groups[0].Value;
                }
            }, RegexOptions.Singleline);

            return newStr;
        }

转载:https://www.it610.com/article/1539167002839511040.htm

借鉴:https://www.cnblogs.com/dinggf/p/11743199.html

标签:unicodeStr,string,C#,解码,strResult,Unicode,return,newStr
From: https://www.cnblogs.com/ererjie520/p/16743865.html

相关文章

  • 带有旋转效果的提交按钮 - 仅限 CSS - 一步一步
    带有旋转效果的提交按钮-仅限CSS-一步一步HTML对于HTML,我们需要一个带有文本和“检查”svg元素的按钮。我们将显示文本并隐藏svg。在按钮焦点上,我们将显示sv......
  • TypeScript一些见解
    1.TypeScript产生背景:  TypeScript是JavaScript的一个超集,支持ECMAScript6标准(ES6教程)。  TypeScript由微软开发的自由和开源的编程语言。TypeSc......
  • EasyCVR通过调取接口开启音频,通道条数与实际不符的原因分析
    EasyCVR视频融合平台部署轻快、功能灵活,在视频能力上,可提供视频直播、录像、回放、检索、云存储、级联、告警等功能。平台可支持多协议、多类型设备接入,包括国标GB28181、R......
  • 上期CTP
      1-上期CTP所对接(搭建开发环境) 个人使用上期CTP接口开发期货程序化交易平台可行吗? ......
  • net.schmizz.sshj.transport.TransportException: Could not verify ssh-ed25519 host
    主要是在使用jprofiler同时修改了server的端口之后出现的问题,记录下解决临时方法(毕竟jprofiler代码混淆了)参考解决方法核心是使用ssh-keyscan-ted25519生成指纹信......
  • Vue3 reactive和ref响应式问题
    reactive:一般用来接收复杂类型数据。定义后再取出就不是响应式数据了,这个问题解决方法如下:reactive接收钩子函数(遇到的是生命周期函数onMounted钩子函数)中axios请求的数据......
  • Xmind 2022 最新版本 Xmind 2022 for mac(思维导图软件)v12.0.3永久版
    Xmind2022forMac是一款非常便捷的制作思维导图的软件,它有非常丰富的模板可以使用,制作思维导图可以帮助用户更高效的进行学习,理清相关学习内容的思路和大体框架,用户可以......
  • CodeTyphon跨平台交叉编译配置
    CodeTyphon和Lazarus的关系相当于就是ubuntu和linux的关系https://www.lmlphp.com/user/57824/article/item/1643421/不过CodeTyphon提供了很多一键配置即可使用的交叉......
  • IDEA:java: Compilation failed: internal java compiler error
    java:Compilationfailed:internaljavacompilererror解决方法:1.打开菜单,File-ProjectStructure-Project-Languagelevel,改成你想要的版本,如:8.下方的Modul......
  • SpringMVC常用注解
    分享几个SpingMVC常用注解(注解的本质是一类继承了Annotation的特殊接口)@Controller是处理请求业务逻辑的组件,这个组件会被Spring识别为可以接受并处理网页请求的组件。@Co......