java将u开头的是什么编码_Java将\u开头的unicode字符串转换为中文

问题如下

有一个字符串,如下:

{"code":1000,"message":"\u67e5\u8be2\u6210\u529f","data":"\u5317\u4eac\u9996\u90fd"}

这个字符串真的是UTF-8的字符串,\u67e5这些字符就是6个字符,如何将其转换为中文:

{"code":1000,"message":"查询成功","data":"北京首都"}

转换方法(一)

因为他是json格式,那么有最简单的方式,Java直接解析json即可:

package cn.ganlixin.ssm.util;

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.ObjectMapper;

import lombok.Data;

import org.junit.Test;

public class JsonUtilsTest {

@Test

public void test() throws JsonProcessingException {

// 要解析的json字符串

String s = "{\"code\":1000,\"message\":\"\\u67e5\\u8be2\\u6210\\u529f\",\"data\":\"\\u5317\\u4eac\\u9996\\u90fd\"}";

ObjectMapper objectMapper = new ObjectMapper();

Response response = objectMapper.readValue(s, Response.class);

System.out.println(response);

// JsonUtilsTest.Response(code=1000, message=查询成功, data=北京首都)

}

/**

* 创建一个类,与json的字段相配

*/

@Data

private static class Response {

private Integer code;

private String message;

private String data;

}

}

转换方式(二)

如果是一个很普通的字符串,不是json格式,就是一个字符串\u67e5\u8be2\u6210\u529f,怎么解析呢?

可以使用下面的方法解析:

package cn.ganlixin.ssm.util;

import com.fasterxml.jackson.core.JsonProcessingException;

import org.junit.Test;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class UnicodeDecode {

@Test

public void test() throws JsonProcessingException {

// 要解析的json字符串

String s = "\\u67e5\\u8be2\\u6210\\u529f";

System.out.println(s); // \u67e5\u8be2\u6210\u529f

System.out.println(convertUnicodeToCh(s)); // 查询成功

}

/**

* 将unicode字符串转为正常字符串

*

* @param str unicode字符串(比如"\u67e5\u8be2\u6210\u529f")

* @return 转换后的字符串(比如"查询成功")

*/

private static String convertUnicodeToCh(String str) {

Pattern pattern = Pattern.compile("(\\\\u(\\w{4}))");

Matcher matcher = pattern.matcher(str);

// 迭代,将str中的所有unicode转换为正常字符

while (matcher.find()) {

String unicodeFull = matcher.group(1); // 匹配出的每个字的unicode,比如\u67e5

String unicodeNum = matcher.group(2); // 匹配出每个字的数字,比如\u67e5,会匹配出67e5

// 将匹配出的数字按照16进制转换为10进制,转换为char类型,就是对应的正常字符了

char singleChar = (char) Integer.parseInt(unicodeNum, 16);

// 替换原始字符串中的unicode码

str = str.replace(unicodeFull, singleChar + "");

}

return str;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值