• Java将u开头的unicode字符串转换为中文


    问题如下

      有一个字符串,如下:

    {"code":1000,"message":"u67e5u8be2u6210u529f","data":"u5317u4eacu9996u90fd"}
    

      这个字符串真的是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格式,就是一个字符串u67e5u8be2u6210u529f,怎么解析呢?

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

    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); // u67e5u8be2u6210u529f
    
            System.out.println(convertUnicodeToCh(s)); // 查询成功
        }
    
        /**
         * 将unicode字符串转为正常字符串
         *
         * @param str unicode字符串(比如"u67e5u8be2u6210u529f")
         * @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;
        }
    }
    

      

  • 相关阅读:
    oracle改表语句
    pr视频过渡效果
    远程桌面连接
    kill-power
    Leetcode 466.统计重复个数
    Leetcode 464.我能赢吗
    Leetcode 462.最少移动次数使数组元素相等
    Leetcode 459.重复的子字符串
    Leetcode 458.可怜的小猪
    Leetcode 457.环形数组循环
  • 原文地址:https://www.cnblogs.com/-beyond/p/12506123.html
Copyright © 2020-2023  润新知