• 关于Java的字符编码


    package 测试想法的小示例代码;
    
    import java.io.CharArrayWriter;
    import java.io.PrintWriter;
    import java.io.UnsupportedEncodingException;
    import java.util.Arrays;
    
    public class 关于字符串转码 {
    
        private static String printByteArray(byte[] byteArray) {
        String javaForm = "Java中的有符号表示形式: " + Arrays.toString(byteArray) + " ; ";
        CharArrayWriter caw = new CharArrayWriter();
        PrintWriter outs = new PrintWriter(caw);
        outs.print("十六进制表示形式(有用的形式): ");
        outs.print("[");
        for (int i = 0; i < byteArray.length; i++) {
            outs.format("0x%02X, ", byteArray[i]);
        }
        String hexForm = caw.toString();
        hexForm = hexForm.substring(0, hexForm.length() - 2);
        hexForm = hexForm + "]";
    
        return javaForm + hexForm;
        }
    
        private static void printStringCode(String str) {
        try {
            System.err.println(""" + str + ""编码如下:");
            System.out.println("	(UTF-8): " + printByteArray(str.getBytes("UTF-8")));
            System.out.println("	(UTF-16): " + printByteArray(str.getBytes("UTF-16")));
            System.out.println("	(GBK): " + printByteArray(str.getBytes("GBK")));
            System.out.println("	(GB2312): " + printByteArray(str.getBytes("GB2312")));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    
        return;
        }
    
        public static void main(String[] args) throws Exception {
        // 0xCE,0xD2 是'我'字的GBK编码
        // 因为Java编译器能识别的byte类型最大表示范围是-128~127,但由于0xCE和0xD2都大于127
        // 故要先把这两个数字转为负数存进byte类型中
        // (因为计算机中是以补码形式保存数据,故以负数存进byte数组后,实际保存的二进制数据还是0xCE和0xD2)
        byte[] getParam = new byte[] { -((byte) (256L - 0xCE)), -((byte) (256L - 0xD2)) };
        String value = new String(getParam, "ISO-8859-1"); // 将'我'字的GBK编码数据原样复制到到String对象中
        byte[] b = value.getBytes("ISO-8859-1"); // 将value字符串对象中的数据原样复制到byte数组b中.
        String newValue = new String(b, "GBK"); // 将数组b中的数据以GBK编码的方式转码成字符串对象的内部编码形式(GBK->UTF-16)
        System.out.println(newValue);
    
        printStringCode("我");
    
        printStringCode("们");
        }
    }
  • 相关阅读:
    你敢说自己了解单例模式?
    关于线程池,那些你还不知道的事
    Dubbo透传traceId/logid的一种思路
    当BeanUtils遇到泛型
    Oval框架如何校验枚举类型的一种思路
    HttpClient(4.5.x)正确的使用姿势
    HttpClient官方sample代码的深入分析(连接池)
    Jaxb如何优雅的处理CData
    JAXB性能优化
    Jaxb对xml报文头的小修小改
  • 原文地址:https://www.cnblogs.com/tonekit/p/12131439.html
Copyright © 2020-2023  润新知