jsonarray中的unicode转中文

一、需求
  接受到的json数组对象字符串,涉及多个中文字段是unicode编码,需要持久化前unicode转码成明文中文。
二、工具
  (一) fastjson (alibaba)
  (二) java自带的类库
   java.util.*(Pattern.compile matcheer ; Matcher.find group )
         或者
          java.lang.* (StringBuIlder append ; String index substring)
三、功能点
 (一) json (JavaScript Object Notaion,JS对象标记)
   JSON是一种轻量级的数据交换格式。它是js规范的一个子集,采用完全独立与编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
 (二)  unicode
  unicode是计算机科学领域里的一项业界标准,包含编码方案和字符集等。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转、处理的要求。
 在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符。在基本多文种平面(英文为 Basic Multilingual Plane,简写 BMP。它又简称为“零号平面”, plane 0)里的所有字符,要用四位十六进制数(例如U+4AE0,共支持六万多个字符);在零号平面以外的字符则需要使用五位或六位十六进制数了。旧版的Unicode标准使用相近的标记方法,但却有些微的差异:在Unicode 3.0里使用“U-”然后紧接着八位数,而“U+”则必须随后紧接着四位数。
  Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。目前的Unicode字符分为17组编排,0x0000 至 0x10FFFF,每组称为平面(Plane),而每平面拥有65536个码位,共1114112个。然而目前只用了少数平面。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
四、示例
 (一) 接受的json转成对象处理
    JSONObject myObject = JSONObject.parseObject(externalVal);
    if(myObject!= null){
    String status = myObjcet.getString("status");
    JSONArray myArray = myObject.getJSONArray("result");
    for(int i = 0; i < myArray.size(); i++){
      JSONObject orderObj = myArray.getJSONObject(i);
      String orderNum = orderObj.getString("order_num");
      Date orderTime = orderObj.getDate("order_time");
    }
 (二)将unicode转成中文
 
public static String unicodeConvert(String unicodeStr){
	//unicodeStr:    {"\u957f\u5ea6":"30","\u5bbd\u5ea6":"30"}
	StringBuilder sb = new StringBuilder();
	int i = -1;
	int pos = 0;
	//从指定pos位置查找“\u”的位置
	while((i = unicodeStr.indexOf("\\u",pos)) != -1){//第一次i=2
		//指定位置pos到出现"\u"中间的字符记录下来
		sb.append(unicodeStr.subString(pos,i));
		if(i+5 < unicodeStr.length()){//查找到"\u",保证后面要有四个字符,能够组成一个完整字节?
			pos = i + 6;
			sb.append((char)Integer.parseInt(unicoderStr.substring(i + 2, i + 6)),16);//如将957f按照16进制解析成有符号的整数,然后转成字符
		}
	}
	if(pos < unicodeStr.length()){
	//如果pos没有超过字符串长度,则将剩余字符也记录进去
		sb.append(unicodeStr(pos));
	}
	return sb.toStrig().replace("{","[").replace("}","]");//["长度":"30","宽度":"30"]
	
}

五、总结

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值