C# 基于json通讯中的中文的处理
如果通讯中产生了\\u4e00-\\u9fa5范围的中文的unicode代码,而不是\u4e00-\u9fa5范围的,那么c#的处理就比较麻烦了。
破解方法:
机制
它会把\\u4e00拆成部分来识别: \\ u4e00 , 神奇的是这种情况下,它会认为 u4e000是一个整体。
正则表达式
正则表达式需要如此书写: "[\\\\4e00-\\\\u9fa5]" , it works!!!虽然是两个部分。
界面显示
但问题是界面(winform)上显示的就是unicode了,这个时候为了让我们UI能够正常显示汉字,需要将\\替换为\。
貌似一个replace就能搞定,非也!
方式1:
"\\" -> \ 字符
"\" -> 报错。此路不通。
方式2:
@"\\" -> "\\\\"
@"\" -> "\\"
这个是南辕北辙。
方式3:
自定义一个算法,来完成\\到\的转换。
思路:
每个字符,实际在计算机中是一个数字。
比如 '1' ,对应的ascii码是49.对于汉字,有GB2312码,归根到底还是一个数字。一个汉字对应一个数字(通常表示的时候用16进制表示)
只要计算出,比如 \\u4e00的数字值(19968), 并将之对应到汉字即可。也就是
char hz = (char)0x4e00
接下来的问题是将"\\u4e00"变成0x4e00,代码如下:
#region 处理中文
/// <summary>
/// \\u4e00-\\u9fa5 ->\u4e00-\u9fa5
/// </summary>
/// <param name="val"></param>
/// <returns></returns>
protected static string process_cn(string val)
{
string ret = val;
if (val.IndexOf("\\u") > -1)
{
int i = -1;
char[] vals = new char[4];
char hz;
while (ret.IndexOf("\\u") > -1)
{
i = ret.IndexOf("\\u");
if (i > -1 && i + 5 < ret.Length)
{
vals = ret.Substring(i + 2, 4).ToCharArray();
hz = (char)parseInt(vals);
ret = ret.Replace("\\u" + toString(vals), hz.ToString());
}
} }
return ret;
} /// <summary>
/// char [] -> string
/// 自带的报参数错误(new String/string(char[]))
/// </summary>
/// <param name="c"></param>
/// <returns></returns>
protected static string toString(char[] c)
{
StringBuilder sb = new StringBuilder();
sb.Append(c);
return sb.ToString();
} /// <summary>
/// (0x)660e -> 26126
/// </summary>
/// <param name="c"></param>
/// <returns></returns>
protected static int parseInt(char[] c)
{
int n = 0;
if (c.Length == 4)
{
n = parseInt(c[3]) + parseInt(c[2]) * 16 + parseInt(c[1]) * 16 * 16 + parseInt(c[0]) * 16 * 16 * 16;
}
return n; } /// <summary>
/// (char)0~9a~zA~Z -> (int)0~15
/// </summary>
/// <param name="c"></param>
/// <returns></returns>
protected static int parseInt(char c)
{
char[] arr1 = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
char[] arr2 = new char[] { 'A', 'B', 'C', 'D', 'E', 'F' };
for (int i = 0; i < arr1.Length; i++)
{
if (c == arr1[i])
return i;
}
for (int i = 0; i < arr2.Length; i++)
{
if (c == arr2[i])
return i + 10;
}
return -1;
}
#endregion
C# 基于json通讯中的中文的处理的更多相关文章
- scrapy输出的json文件中显示中文
scrapy用-o filename.json 输出时,会默认使用unicode编码,当内容为中文时,输出的json文件不便于查看,如下图: 可以在setting.py文件中修改默认的输出编码方式,只 ...
- python3处理json文件中含有中文dumps的应用
python3的编码问题一直比较简单 内存中字符串采用unicode 存储到文件中采用utf-8 以下为str,byte互相转换的过程: str = "abc学习" str Out ...
- 网络协议 21 - RPC 协议(中)- 基于 JSON 的 RESTful 接口协议
上一节我们了解了基于 XML 的 SOAP 协议,SOAP 的 S 是啥意思来着?是 Simple,但是好像一点儿都不简单啊! 传输协议问题 对于 SOAP 来讲,比如我创建一个订单, ...
- requests(三):json请求中中文乱码处理
最近收到一个问题:json格式请求数据中有中文,导致服务端签名失败. 问题详情: 一位同学在发送json格式的post请求时,请求数据中有中文内容: {"inputCodes":[ ...
- 基于Json.NET自己实现MVC中的JsonValueProviderFactory
写了博文ASP.NET MVC 3升级至MVC 5.1的遭遇:“已添加了具有相同键的项”之后,继续看着System.Web.Mvc.JsonValueProviderFactory的开源代码. 越看越 ...
- iOS 中json解析数据出现中文乱码的问题
一般服务器的编码格式都是UTF8,这样通过json解析下来的的数据,一般中文是不会出现乱码,但是如果服务器的编码格式不是UTF8,通过json解析的数据中的中文容易出现luan乱码,怎么解决这个问题呢 ...
- PHP中json_encode后,在json字符串中依然显示中文的解决方案
<?php header("Content-Type:text/html;charset=utf-8;"); $arr = array ('Version_code'=> ...
- php 如何把中文写入json中 当json文件中还显示的是中文
/*** * 更新版本 */ function showupversionsub(){ #接受post 过来的数据 $app_type=$_POST['aap_type']; if($app_type ...
- asp.net core 基于 JSON 实现多语言
asp.net core 基于 JSON 实现多语言 Intro 上次我们提到了,微软默认提供基于资源文件的多语言本地化,个人感觉使用起来不是太方便,没有 json 看起来直观,于是动手造了一个轮子, ...
随机推荐
- webform membership2.0注入debug
private IUserContract _UserService; public IUserContract UserService { get { if (_UserService == nul ...
- ConfuserEx
今天给大家介绍一个开源.net混淆器——ConfuserEx http://yck1509.github.io/ConfuserEx/ 由于项目中要用到.net 混淆器,网上搜寻了很多款,比如Dotf ...
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二 ...
- [CentOs7]iptables防火墙安装与设置
摘要 CentOS 7.0默认使用的是firewall作为防火墙,如果改为iptables防火墙,如何操作? 关闭firewall: systemctl stop firewalld.service ...
- Hibernate 应用
完善的持久化层应该达到以下目标: 1.代码可重用性高,能够完成所有的数据库访问操作. 2.如果有需要的话,能够支持多种数据库平台. 3.具有相对独立性,当持久化层的实现发生变化,不会影响上层的实现. ...
- c# 中使用memcached
1.首先下载memcached 服务端 2.使用Enyim.Caching .Net 客户端 3.配置web.config <sectionGroup name="QuickBo ...
- js操作json与字符串相互转换
字符串转对象(strJSON代表json字符串) var obj = eval(strJSON); var obj = strJSON.parseJSON(); var obj = JSON.pars ...
- R入门<二>-时间序列研究
续之前那篇随笔 前天写完随笔后,很自豪的拿出来去跟带我入数据挖掘和SAS基础的大牛@八公炫耀,然后收获了一堆时间序列的材料,非常感谢大牛! ARIMA就是看图形,ACF和PACF,原理不需要知道,因为 ...
- js改变HTML元素的值
js改变HTML元素的值(常用,备忘) <!DOCTYPE html> <html> <body> <h1>我的第一段 JavaScript</h ...
- 示波器trigger的使用方法
背景: 下位机有俩个IO口设置为外部中断——边沿触发.低电平有效.因此我需要抓取下降沿波形,但低电平时间很短,手动暂停抓取不仅不科学还费力,那么该如何准确的抓取到呢?最好的办法是使用示波器的trige ...