如何确定当前系统编码方式

前言:报文在项目之间传递的时候出现验签失败,但是打印出来的需要验签的字符串显示结果都是正确的;直接将传送的字节流(byte数组)打印出来,发现了其中中文的byte值不一样,初步断定是报文在传输和接收时的编码方式不一样;但是我的两个项目都是布署在一台机器上的,应该不会出现此问题,接下来,一步步找出真正原因:

确定当前系统编码方式,其实从工程中的属性就可以看出来,但是用代码验证一下更靠谱:

        String s = "中文集abc结果";
        byte[] b = s.getBytes();
        for(byte i : b) {
            System.out.print(i + ",");
        }
        System.out.println("");
        String t;
        try {
            t = new String(b, "UTF-8"); // 挨个换编码方式来试,一般就UTF-8和GBK
            byte[] c = t.getBytes();
            for(byte i : c) {
                System.out.print(i + ",");
            }
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

验证了当前系统的编码方式,接下来就挨个试喽:

最后发现在验签的时候都是使用的默认的方法:"".getBytes();把两边的编码方式改成一致即修复问题

看来真是伤不起,以后使用"".getBytes的时候一定要把编码方式加上。

原文地址:https://www.cnblogs.com/garinzhang/p/3082009.html