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. Visual Studio Installer打包安装项目VS2015

    使用VS2015的Visual Studio Installer打包安装项目,虽然整体操作很简单,但还是有几个特殊的点需要记一下,故写下此博客方便以后查阅 第一步,创建安装项目 如下: 里面最左侧的框 ...

  2. 【Javascript-ECMA6-Fetch详解】

    Fetch 由于Fetch API是基于Promise设计,因此旧的浏览器并不支持该API,需要引用时引用es6-promise. 基本知识 fetch请求返回response格式 body Fetc ...

  3. Spring知识点小结(三)

    一.aop的简介 aop:面向切面编程    aop是一种思想,面向切面编程思想,Spring内部提供了组件对aop进行实现    aop是在运行期间使用动态代理技术实现的思想    aop是oop延 ...

  4. 使用jQuery实现向上循环滚动效果(超简单)

    今天突发奇想 想到的一个新思路 通过使用animate改变外边距达到滚动效果 再用复制节点插入到最后一行达到循环目的 HTML代码如下 <body> <ul style=" ...

  5. jquery实现表单验证简单实例

    /* 描述:基于jquery的表单验证插件. */ (function ($) { $.fn.checkForm = function (options) { var root = this; //将 ...

  6. thinkphp5配置讲解

    一.thinkphp配置类型有哪些? 1.在thinkphp中,有6种配置.即惯例配置,应用配置.扩展配置.模块配置.场景配置.动态配置. 2.惯例配置就是系统默认的配置. 3.应用配置就是我们自己开 ...

  7. Spark RDD API详解之:Map和Reduce

    RDD是什么? RDD是Spark中的抽象数据结构类型,任何数据在Spark中都被表示为RDD.从编程的角度来看, RDD可以简单看成是一个数组.和普通数组的区别是,RDD中的数据是分区存储的,这样不 ...

  8. spark exectors的启动总结

    在spark启动之后,worker和master注册通信之后,在进入用户提交app中,new SparkContext之后就会在worker上分配exectors了. 首先在sparkContext中 ...

  9. Scala的符号入门

    Spark是由Scala编写的.Spark作为一款十分易用高效的大数据框架使用越来越广泛,Scala也随之有更多的人去学习. 语言相通,相信有python.java基础的程序员学习Scala并没有太大 ...

  10. 01 elasticsearch 概念理解

    最近在看一套 es 的教学视频,以下笔记主要来自视频资源 Near Realtime(NRT):近实时,先说实时就是数据创建到查询时间在毫秒级或更少: 和实时不一样的是近实时数据在创建到查询最多需要n ...