美文网首页
[ 编码 ]原字节不变 信息不变

[ 编码 ]原字节不变 信息不变

作者: 一个好汉 | 来源:发表于2021-08-29 00:06 被阅读0次

测试在编码转换过程是否会丢失信息

事实证明是会的
但是只要在转换的过程 原字节不会发生变化 还是可以还原出原来的结果的

/**
     * 编码之间的转换
     *
     * 只要在转换的过程 原字节不会发生变化 还是可以还原出原来的结果的
     */
    public static void conversion() {
        List<String> srcStrings = Arrays.asList("少年", "少µ年", "少");
        Map<Charset, Charset[]> charsetMap = new LinkedHashMap<Charset, Charset[]>(){{
            put(StandardCharsets.UTF_8, new Charset[]{StandardCharsets.UTF_8, new GBK(), StandardCharsets.ISO_8859_1});
            put(new GBK(), new Charset[]{StandardCharsets.UTF_8, new GBK(), StandardCharsets.ISO_8859_1});
            put(StandardCharsets.ISO_8859_1, new Charset[]{StandardCharsets.UTF_8, new GBK(), StandardCharsets.ISO_8859_1});
        }};
        charsetMap.forEach((key, value) -> {
            Arrays.stream(value).forEach(
                    middleCharset->srcStrings.forEach(e -> translate(e, key, middleCharset)));
        });
    }

private static void translate(String src, Charset srcCharset, Charset middleCharset) {
        log.info("src :{}, srcCharset: {}, middleCharset: {}",
                src, srcCharset.name(), middleCharset.name());
        byte[] uBytes = src.getBytes(srcCharset);
        log.info("src bytes:{}",
                HexUtil.encodeHexStr(uBytes));
        String gStr = new String(uBytes, middleCharset);
        log.info("after decode : {}", gStr);
        byte[] afterGbkDecodeBytes = gStr.getBytes(middleCharset);
        log.info("after middle conversion bytes:{}", HexUtil.encodeHexStr(afterGbkDecodeBytes));
        String finalStr = new String(afterGbkDecodeBytes, srcCharset);
        log.info("final String:{}", finalStr);

        if (src.equals(finalStr)) {
            log.error("[equals]--- src :{}, srcCharset: {}, middleCharset: {}",
                    src, srcCharset.name(), middleCharset.name());
        }
    }

结果:

src :少年, srcCharset: UTF-8, middleCharset: UTF-8
src bytes:e5b091e5b9b4
after decode : 少年
after middle conversion bytes:e5b091e5b9b4
final String:少年
[equals]--- src :少年, srcCharset: UTF-8, middleCharset: UTF-8
src :少µ年, srcCharset: UTF-8, middleCharset: UTF-8
src bytes:e5b091c2b5e5b9b4
after decode : 少µ年
after middle conversion bytes:e5b091c2b5e5b9b4
final String:少µ年
[equals]--- src :少µ年, srcCharset: UTF-8, middleCharset: UTF-8
src :少, srcCharset: UTF-8, middleCharset: UTF-8
src bytes:e5b091
after decode : 少
after middle conversion bytes:e5b091
final String:少
[equals]--- src :少, srcCharset: UTF-8, middleCharset: UTF-8
src :少年, srcCharset: UTF-8, middleCharset: GBK
src bytes:e5b091e5b9b4
after decode : 灏戝勾
after middle conversion bytes:e5b091e5b9b4
final String:少年
[equals]--- src :少年, srcCharset: UTF-8, middleCharset: GBK
src :少µ年, srcCharset: UTF-8, middleCharset: GBK
src bytes:e5b091c2b5e5b9b4
after decode : 灏懧靛勾
after middle conversion bytes:e5b091c2b5e5b9b4
final String:少µ年
[equals]--- src :少µ年, srcCharset: UTF-8, middleCharset: GBK
src :少, srcCharset: UTF-8, middleCharset: GBK
src bytes:e5b091
after decode : 灏�
after middle conversion bytes:e5b03f
final String:�?
src :少年, srcCharset: UTF-8, middleCharset: ISO-8859-1
src bytes:e5b091e5b9b4
after decode : �年
after middle conversion bytes:e5b091e5b9b4
final String:少年
[equals]--- src :少年, srcCharset: UTF-8, middleCharset: ISO-8859-1
src :少µ年, srcCharset: UTF-8, middleCharset: ISO-8859-1
src bytes:e5b091c2b5e5b9b4
after decode : �µ年
after middle conversion bytes:e5b091c2b5e5b9b4
final String:少µ年
[equals]--- src :少µ年, srcCharset: UTF-8, middleCharset: ISO-8859-1
src :少, srcCharset: UTF-8, middleCharset: ISO-8859-1
src bytes:e5b091
after decode : å°�
after middle conversion bytes:e5b091
final String:少
[equals]--- src :少, srcCharset: UTF-8, middleCharset: ISO-8859-1
src :少年, srcCharset: GBK, middleCharset: UTF-8
src bytes:c9d9c4ea
after decode : ����
after middle conversion bytes:efbfbdefbfbdefbfbdefbfbd
final String:锟斤拷锟斤拷
src :少µ年, srcCharset: GBK, middleCharset: UTF-8
src bytes:c9d93fc4ea
after decode : ��?��
after middle conversion bytes:efbfbdefbfbd3fefbfbdefbfbd
final String:锟斤拷?锟斤拷
src :少, srcCharset: GBK, middleCharset: UTF-8
src bytes:c9d9
after decode : ��
after middle conversion bytes:efbfbdefbfbd
final String:锟斤拷
src :少年, srcCharset: GBK, middleCharset: GBK
src bytes:c9d9c4ea
after decode : 少年
after middle conversion bytes:c9d9c4ea
final String:少年
[equals]--- src :少年, srcCharset: GBK, middleCharset: GBK
src :少µ年, srcCharset: GBK, middleCharset: GBK
src bytes:c9d93fc4ea
after decode : 少?年
after middle conversion bytes:c9d93fc4ea
final String:少?年
src :少, srcCharset: GBK, middleCharset: GBK
src bytes:c9d9
after decode : 少
after middle conversion bytes:c9d9
final String:少
[equals]--- src :少, srcCharset: GBK, middleCharset: GBK
src :少年, srcCharset: GBK, middleCharset: ISO-8859-1
src bytes:c9d9c4ea
after decode : ÉÙÄê
after middle conversion bytes:c9d9c4ea
final String:少年
[equals]--- src :少年, srcCharset: GBK, middleCharset: ISO-8859-1
src :少µ年, srcCharset: GBK, middleCharset: ISO-8859-1
src bytes:c9d93fc4ea
after decode : ÉÙ?Äê
after middle conversion bytes:c9d93fc4ea
final String:少?年
src :少, srcCharset: GBK, middleCharset: ISO-8859-1
src bytes:c9d9
after decode : ÉÙ
after middle conversion bytes:c9d9
final String:少
[equals]--- src :少, srcCharset: GBK, middleCharset: ISO-8859-1
src :少年, srcCharset: ISO-8859-1, middleCharset: UTF-8
src bytes:3f3f
after decode : ??
after middle conversion bytes:3f3f
final String:??
src :少µ年, srcCharset: ISO-8859-1, middleCharset: UTF-8
src bytes:3fb53f
after decode : ?�?
after middle conversion bytes:3fefbfbd3f
final String:?�?
src :少, srcCharset: ISO-8859-1, middleCharset: UTF-8
src bytes:3f
after decode : ?
after middle conversion bytes:3f
final String:?
src :少年, srcCharset: ISO-8859-1, middleCharset: GBK
src bytes:3f3f
after decode : ??
after middle conversion bytes:3f3f
final String:??
src :少µ年, srcCharset: ISO-8859-1, middleCharset: GBK
src bytes:3fb53f
after decode : ?�?
after middle conversion bytes:3f3f3f
final String:???
src :少, srcCharset: ISO-8859-1, middleCharset: GBK
src bytes:3f
after decode : ?
after middle conversion bytes:3f
final String:?
src :少年, srcCharset: ISO-8859-1, middleCharset: ISO-8859-1
src bytes:3f3f
after decode : ??
after middle conversion bytes:3f3f
final String:??
src :少µ年, srcCharset: ISO-8859-1, middleCharset: ISO-8859-1
src bytes:3fb53f
after decode : ?µ?
after middle conversion bytes:3fb53f
final String:?µ?
src :少, srcCharset: ISO-8859-1, middleCharset: ISO-8859-1
src bytes:3f
after decode : ?
after middle conversion bytes:3f
final String:?

相关文章

  • [ 编码 ]原字节不变 信息不变

    测试在编码转换过程是否会丢失信息 事实证明是会的但是只要在转换的过程 原字节不会发生变化 还是可以还原出原来的结果...

  • 文笔——仿写

    原句:蓝蓝的天空 仿写:碧绿的草原。 原则:就是字数不变,只替换词语。即名词换名词,动词换成动词等,字数不变。 原...

  • Java-IO流-基本类型数据流-DataOutputStrea

    DataOutputStream&DataInputStream 需求:保证数据值字节原样性不变。例如:写一个整数...

  • 读《论语》――半部《论语》治天下

    《论语》成语 磨而不磷,涅而不缁 释义 磨了以后不变薄,染了以后不变黑。比喻意志坚定的人不会受环境的影响。 原...

  • 关于 设置 sublime text3 编码格式为utf-8

    文件的编码格式已经设置UTF-8,但提交SVN 之后编码格式还是不变。 原因是 文件内容中没有中文,其英文的编码格...

  • 条件不变≠结果不变

    条件不变≠结果不变 ——正确把握经济学试题中的“其他条件不变” 条件不变≠结果不变(完整版)条件不变≠结果不变(完...

  • 随缘不变,不变随缘。

    不如就让它聚的只管聚,散的只管散,聚也不纠缠,散也不贪恋。就像每一片花瓣落地,是结束也是归宿,回首之间,还是那个人...

  • 思维不变,结果不变

    今天跟一个89年的小朋友聊天,我这个小朋友开了一家金融投资公司,按正常理解,是一个思维非常超前的人,老家是...

  • 随缘不变,不变随缘

    来是偶然的,走是必然的。所以你必须,随缘不变,不变随缘。 缘分这件事,可能没有人能够说的清楚;遇见一个人满心欢喜,...

  • 过程不变,结果不变

    每当忙起来就是一天,脚不沾地!这是不得不做的事情,接下来呢?就是孩子在家很好,岳母在家很勤,媳妇在家很贤。而我在工...

网友评论

      本文标题:[ 编码 ]原字节不变 信息不变

      本文链接:https://www.haomeiwen.com/subject/ignhiltx.html