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;
    }
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM