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;
    }
}
java 
更新时间:2020-11-04 09:57:01

本文由 清水河恶霸 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
原文链接:http://ql.magic-seven.top/2020/11/01/j-a-v-a-jiang--u-kai-tou-de-u-n-i-c-o-d-e-zi-fu-chuan-zhuan-huan-wei-zhong-wen.html
最后更新:2020-11-04 09:57:01

评论

Your browser is out of date!

Update your browser to view this website correctly. Update my browser now

×