首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

Python3 数字 chr 后拼接成字符串和其他语言有区别?

  •  
  •   assad · 6 天前 · 197 次点击

    items = [119,156,161,138,90,240,56,165,114,4]

    python3

        while i < strlenth:
            self.result += chr(item)
            i += 1
    

    php

        while ($i < $strlenth) {
            $this->result .= chr($item);
            $i++;
    

    结果拼出来的字符不一样,MD5 和 base64 均不一样

    第 1 条附言  ·  6 天前
    对于 ascii 码大于 128 的,chr 出来的字符串就有区别了
        1
    chenstack   6 天前   ♥ 1
    要说区别可能是 python3 字符串 encode 成 bytes 后不一样,因为 encode 默认编码是 utf-8,所给的测试代码并不完整。

    python3:
    from hashlib import md5
    items = [119,156,161,138,90,240,56,165,114,4]
    strlenth = len(items)

    result = ''
    i = 0
    while i < strlenth:
    result += chr(items[i])
    i += 1
    print(md5(result.encode('latin-1')).hexdigest())


    php:
    <?php

    $items = [119,156,161,138,90,240,56,165,114,4];
    $strlenth = count($items);

    $i = 0;
    $result = '';
    while ($i < $strlenth) {
    $result .= chr($items[$i]);
    $i++;
    }
    print(md5($result));
    ?>

    结果均为 0e996abf46e4d5acadead68fbf1f877e
        2
    assad   6 天前
    encode('latin-1'),真奇葩,居然是 latin-1,我试过各种编码,就是没用这个
    @chenstack
        3
    chenstack   6 天前   ♥ 1
    百科的介绍:Latin1 是 ISO-8859-1 的别名,有些环境下写作 Latin-1。ISO-8859-1 编码是单字节编码,向下兼容 ASCII,其编码范围是 0x00-0xFF。因为 ISO-8859-1 编码范围使用了单字节内的所有空间,在支持 ISO-8859-1 的系统中传输和存储其他任何编码的字节流都不会被抛弃。
    所以用 encode('latin-1')时所以字节会原封不动的保留,不会被转换。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   2232 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 23ms · UTC 11:33 · PVG 19:33 · LAX 04:33 · JFK 07:33
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1