C# 字符串与unicode互相转换实战案例

作者:棉晗榜 时间:2023-12-23 09:29:54 

我就废话不多说了,大家还是直接看代码吧~


/// <summary>
 /// 字符串转Unicode
 /// </summary>
 /// <param name="source">源字符串</param>
 /// <returns>Unicode编码后的字符串</returns>
 public static string String2Unicode(string source)
 {
  var bytes = Encoding.Unicode.GetBytes(source);
  var stringBuilder = new StringBuilder();
  for (var i = 0; i < bytes.Length; i += 2)
  {  
   stringBuilder.AppendFormat("\\u{0:x2}{1:x2}", bytes[i + 1], bytes[i]);
  }
  return stringBuilder.ToString();
 }
 /// <summary>
 /// 字符串转为UniCode码字符串
 /// </summary>
 /// <param name="s"></param>
 /// <returns></returns>
 public static string StringToUnicode(string s)
 {
  char[] charbuffers = s.ToCharArray();
  byte[] buffer;
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < charbuffers.Length; i++)
  {
   buffer = System.Text.Encoding.Unicode.GetBytes(charbuffers[i].ToString());
   sb.Append(String.Format("\\u{0:X2}{1:X2}", buffer[1], buffer[0]));
  }
  return sb.ToString();
 }
 /// <summary>
 /// Unicode字符串转为正常字符串
 /// </summary>
 /// <param name="srcText"></param>
 /// <returns></returns>
 public static string UnicodeToString(string srcText)
 {
  string dst = "";
  string src = srcText;
  int len = srcText.Length / 6;
  for (int i = 0; i <= len - 1; i++)
  {
   string str = "";
   str = src.Substring(0, 6).Substring(2);
   src = src.Substring(6);
   byte[] bytes = new byte[2];
   bytes[1] = byte.Parse(int.Parse(str.Substring(0, 2), System.Globalization.NumberStyles.HexNumber).ToString());
   bytes[0] = byte.Parse(int.Parse(str.Substring(2, 2), System.Globalization.NumberStyles.HexNumber).ToString());
   dst += Encoding.Unicode.GetString(bytes);
  }
  return dst;
 }

补充:C# unicode string 转换 codepoint

C# 的string和StringBuilder都支持使用codepoint直接构造字符串。unicode的字符串形式一般都是'\u1234'这种转义模式。 其中‘1234'就是unicode codepoint的16进制形式。

通过计算,可以把这种形式的字符串,直接转化为int32类型的codepoint。


/// <summary>
 /// Get the unicode code point
 /// </summary>
 private static int GetUnicodeCodePoint(char c1, char c2, char c3, char c4)
 {
  return UnicodeCharToInt(c1) * 0x1000 +
    UnicodeCharToInt(c2) * 0x100 +
    UnicodeCharToInt(c3) * 0x10 +
    UnicodeCharToInt(c4);
 }
 /// <summary>
 /// Single unicode char convert to int
 /// </summary>
 private static int UnicodeCharToInt(char c)
 {
  switch (c)
  {
   case '0':
   case '1':
   case '2':
   case '3':
   case '4':
   case '5':
   case '6':
   case '7':
   case '8':
   case '9':
    return c - '0';
   case 'a':
   case 'b':
   case 'c':
   case 'd':
   case 'e':
   case 'f':
    return c - 'a' + 10;
   case 'A':
   case 'B':
   case 'C':
   case 'D':
   case 'E':
   case 'F':
    return c - 'A' + 10;
  }
  throw new Exception(string.Format("Unicode char '{0}' error", c));
 }

使用的时候codepoint需要强转为char类型。比如:


StringBuilder sb = new StringBuilder();
sb.Append((char) GetUnicodeCodePoint(c1, c2, c3, c4));

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

来源:https://blog.csdn.net/u011511086/article/details/72865006

标签:C#,字符串,unicode
0
投稿

猜你喜欢

  • Mybatis plus通用字段自动填充的示例

    2022-10-27 02:05:27
  • Java 8 Function函数式接口及函数式接口实例

    2022-04-13 14:55:05
  • 详解Java面向对象中的继承

    2023-10-06 13:26:14
  • request如何获取body的json数据

    2021-11-16 20:30:31
  • C#利用TreeView控件实现目录跳转

    2021-07-26 02:57:50
  • Android开发中使用Intent打开第三方应用及验证可用性的方法详解

    2021-08-12 19:28:47
  • Android实现简单手电筒功能

    2023-09-17 19:50:27
  • Android实现指针刻度转盘

    2022-06-08 07:41:42
  • C#实现异步编程的方法

    2022-03-01 22:43:27
  • 基于Java实现双向链表

    2022-11-17 11:39:16
  • C#如何安全、高效地玩转任何种类的内存之Span的本质

    2022-10-23 10:59:15
  • 使用javafx更新UI的方法

    2023-05-02 17:32:30
  • springboot整合mybatis实现数据库的更新批处理方式

    2023-11-29 07:08:37
  • 详解Java Synchronized的实现原理

    2023-11-25 06:04:53
  • java实现简单石头剪刀布游戏

    2023-07-20 05:31:37
  • Kotlin空安全空类型浅谈

    2022-06-18 22:48:49
  • 如何让Spring Rest 接口中路径参数可选

    2022-02-17 19:29:14
  • Android应用程序转到后台并回到前台判断方法

    2022-11-12 19:49:35
  • java向下转型基础知识点及实例

    2022-07-01 11:48:38
  • java中ZXing 生成、解析二维码图片的小示例

    2022-07-24 11:50:39
  • asp之家 软件编程 m.aspxhome.com