using System;

 /// <summary>
/// UTF8字符串转换为汉字用的类
/// 转换如"\\u8d35"之类的字符串为对应的汉字
/// </summary>
class UTF8String
{
string m_strContent = "";
/// <summary>
/// 构造函数
/// </summary>
/// <param name="content">要转换的字符串</param>
public UTF8String(string content)
{
m_strContent = content;
}
public string getContent()
{
return m_strContent;
}
/// <summary>
/// 转换函数
/// </summary>
/// <returns>返回转换好的字符串</returns>
public string ToString()
{
string reString = null;
char[] content = m_strContent.ToCharArray(); //把字符串变为字符数组,以进行处理
for (int i = ; i < content.Length; i++) //遍历所有字符
{
if (content[i] == '\\') //判断是否转义字符 \
{
switch (content[i + ]) //判断转义字符的下一个字符是什么
{
case 'u': //转换的是汉字
case 'U':
reString += HexArrayToChar(content, i + ); //获取对应的汉字
i = i + ;
break;
case '/': //转换的是 /
case '\\': //转换的是 \
case '"':
break;
default: //其它
reString += EscapeCharacter(content[i + ]); //转为其它类型字符
i = i + ;
break;
}
}
else
reString += content[i]; //非转义字符则直接加入
}
return reString;
} /// <summary>
/// 字符数组转对应汉字字符
/// </summary>
/// <param name="content">要转换的数字</param>
/// <param name="startIndex">起始位置</param>
/// <returns>对应的汉字</returns>
private char HexArrayToChar(char[] content, int startIndex)
{
char[] ac = new char[];
for (int i = ; i < ; i++) //获取要转换的部分
ac[i] = content[startIndex + i];
string num = new string(ac); //字符数组转为字符串
return HexStringToChar(num);
} /// <summary>
/// 转义字符转换函数
/// 转换字符为对应的转义字符
/// </summary>
/// <param name="c">要转的字符</param>
/// <returns>对应的转义字符</returns>
private char EscapeCharacter(char c)
{
char rc;
switch (c)
{
case 't':
c = '\t';
break;
case 'n':
c = '\n';
break;
case 'r':
c = '\r';
break;
case '\'':
c = '\'';
break;
case '':
c = '\0';
break;
}
return c;
} /// <summary>
/// 字符串转对应汉字字符
/// 只能处理如"8d34"之类的数字字符为对应的汉字
/// 例子:"9648" 转为 '陈'
/// </summary>
/// <param name="content">转换的字符串</param>
/// <returns>对应的汉字</returns>
public static char HexStringToChar(string content)
{
int num = Convert.ToInt32(content, );
return (char)num;
} /// <summary>
/// 把string转为UTF8String类型
/// </summary>
/// <param name="content"></param>
/// <returns></returns>
public static UTF8String ValueOf(string content)
{
string reString = null;
char[] ac = content.ToCharArray();
int num;
foreach (char c in ac)
{
num = (int)c;
string n = num.ToString("X2");
if (n.Length == )
reString += "\\u" + n;
else
reString += c;
}
return new UTF8String(reString);
} }

【转】UTF8字符串转换为汉字 c#,转自游戏开发主席的更多相关文章

  1. UTF8字符串转换为汉字 c#

    using System; /// <summary> /// UTF8字符串转换为汉字用的类 /// 转换如"\\u8d35"之类的字符串为对应的汉字 /// < ...

  2. C# 实现十六进制Unicode编码字符串转换为汉字

    网上找了几个方法,但是运行之后会报错,提示要解析的字符串格式不正确.然后我猜想可能是传入的字符串 \u60a8\u4eca\u65e5\u5df2\u7b7e\u5230 中带"\" ...

  3. PHP文本处理之中文汉字字符串转换为数组

    在PHP中我们可以通过str_split 将字符串转换为数组,但是却对中文无效,下面记录一下个人将中文字符串转换为数组的方法. 用到的PHP函数 mb_strlen - 获取字符串的长度 mb_sub ...

  4. PHP文本处理 中文汉字字符串 转换为数组

    在PHP中我们可以通过str_split 将字符串转换为数组,但是却对中文无效,下面记录一下个人将中文字符串转换为数组的方法. 用到的PHP函数 mb_strlen — 获取字符串的长度 functi ...

  5. UTF-8编码的字符串拆分成单字、获取UTF-8字符串的字符个数的代码及原理

    一.字符编码简介 1. ASCII码 在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(by ...

  6. 截取UTF-8编码的汉字,最后一个字出现乱码的问题

    问题描述 原来字串内容name为下面内容: ######name=杨乃文做DJ,微信公众号FunRadio.什么样的姿态是小丑姿态?2016046###### 需要截取成大小为64的name_rm[6 ...

  7. 中文字符串转换为十六进制Unicode编码字符串

    package my.unicode; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Uni ...

  8. JSon_零基础_008_将JSon格式的"数组"字符串转换为List集合

    将JSon格式的"数组"字符串转换为List集合. 应用此技术从一个json对象字符串格式中得到一个java对应的对象. JSONObject是一个“name.values”集合, ...

  9. JSon_零基础_007_将JSon格式的"数组"字符串转换为Java对象"数组"

    将JSon格式的"数组"字符串转换为Java对象"数组". 应用此技术从一个json对象字符串格式中得到一个java对应的对象. JSONObject是一个“n ...

随机推荐

  1. JQuery Ajax 使用FormData上传文件对象

    FormData部分: 先new FormData对象 :let somedata = new FormData(),然后将数据添加进去,这里我们使用append()进行添加. 这里举一个上传头像的例 ...

  2. AJAX上传文件到服务器

    上传文件是常要处理的事情,使用ajaxFileUpload.js处理比较方便,这里的ajaxFileUpload.js文件修改过的, Html部分 <input type="file& ...

  3. CF1066A Vova and Train(模拟)

    大水题... 题目要求你求能看到的灯笼数,我们可以分为3部分 总共的灯笼数——————1 在 l 左面的灯笼数(不包括lll)——————2 在 r 左面的灯笼数(包括rrr)——————3 我们知道 ...

  4. dmesg功能介绍

    dmesg 命令的使用范例 ‘dmesg’命令设备故障的诊断是非常重要的.在‘dmesg’命令的帮助下进行硬件的连接或断开连接操作时,我们可以看到硬件的检测或者断开连接的信息.‘dmesg’命令在多数 ...

  5. 使用apt-get install时如何指定安装版本

    命令语法如下: sudo apt-get install package=version 例如: sudo apt-get install samba=2:4.4.5+dfsg-2ubuntu6

  6. Css Sprite(雪碧图、精灵图)<图像拼合技术>

    一.精灵图使用场景: 二.Css Sprite(优点) 减少图片的字节. 减少网页的http请求,从而大大的提高页面的性能. 解决了网页设计师在图片命名上的困扰,只需对一张集合的图片上命名就可以了,不 ...

  7. 迪米特法则(LoD)

    如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用.如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用.其根本思想是类之间的松耦合. 类之间的耦合越弱,越有利于 ...

  8. 『Linux基础 - 1』计算机基础概念

    这篇笔记的知识点结构目录: 认识计算机: (1)什么是计算机; (2)计算机的发展过程 计算机的构成: (1) 计算机硬件系统; (2) 计算机软件系统 二进制: (1) 为什么用二进制 (2) 二进 ...

  9. Python学习笔记三:数据类型

    数据类型 整数int 32位机器,-2**31~2**31-1,即-2147483648~2147483647(4亿多) 64位机器,-2**63~2**63-1,非常大了. 长整型long 没有位数 ...

  10. 使用C语言协助办公_02批量修改学生信息

    最新录制了一个使用C语言批量修改学生信息的视频,主要是讲了如何处理文件路径以及批量修改的思路.灵感来源于需要将整个17级社保照片按规格改名字.具体见:https://chuanke.baidu.com ...