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