首页   注册   登录
 chenstack 最近的时间轴更新

chenstack

  •   V2EX 第 216014 号会员,加入于 2017-02-19 12:55:40 +08:00
    chenstack 最近回复了
    百科的介绍:Latin1 是 ISO-8859-1 的别名,有些环境下写作 Latin-1。ISO-8859-1 编码是单字节编码,向下兼容 ASCII,其编码范围是 0x00-0xFF。因为 ISO-8859-1 编码范围使用了单字节内的所有空间,在支持 ISO-8859-1 的系统中传输和存储其他任何编码的字节流都不会被抛弃。
    所以用 encode('latin-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
    @myyou @crb912
    本来是讨论 append 和 extend,结果有些人讨论的是+=操作符是不是 extend 了。
    += 会优先看有没有__iadd__方法,对于 list,是有的。在这个情况下 a += b 和 a = a + b 不是等价的。如 xpresslink 所说,
    list 的+=和 extend 几乎是等价的,如果还纠结+操作符,不如做个试验
    a = [1, 2]
    print(id(a))
    a += [3]
    print(id(a))
    a = a + [4]
    print(id(a))

    对于楼主的问题,如果只有一个元素添加,我选 appand,语义上更符合,而且没有创建 list 的开销
    30 天前
    回复了 dwjgwsm 创建的主题 问与答 把字符串变成变量的问题
    最小复现样例:
    def test():
    locals()['a'] = 1
    print(locals())
    print(a)

    python3 的文档是这样说的:
    locals()
    Update and return a dictionary representing the current local symbol table. Free variables are returned by locals() when it is called in function blocks, but not in class blocks.

    Note The contents of this dictionary should not be modified; changes may not affect the values of local and free variables used by the interpreter.

    所以 function 中修改 locals()是没有意义的
    30 天前
    回复了 Mavious 创建的主题 Python 十六进制编码 str 转汉字的方法?!
    python3 的 str 类型内部存的是 unicode, str.encode 默认编码是 utf-8,'\xe6\xb9\x96'.encode()结果并不是 b'\xe6\xb9\x96'

    说一下结论,个人认为比较好的方式,使用 latin-1 或 charmap 编码器编码到相同字节的 bytes:
    text = '\xe6\xb9\x96\xe5\xb7\x9e\xe6\x96\xb0\xe5\x9f\x8e\xe5\xbb\xba'
    print(text.encode('latin-1').decode('utf-8'))

    或者手动映射:
    print(bytes(map(ord, text)).decode('utf-8'))
    32 天前
    回复了 lsdir 创建的主题 游戏 绝地求生。
    堡垒之夜了解一下?
    还喜欢看动漫逛 B 站和逛 V 站
    63 天前
    回复了 chenstack 创建的主题 问与答 来求个提示,阿里技术的贺岁彩蛋
    @jasonsheh @moult 感谢,解出来了
    给个简单的,例如文件名是 test.txt
    sed 's/"\([^"]\{0,\}\)"/“$1 ”/g' -i test.txt
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   2882 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 9ms · UTC 08:39 · PVG 16:39 · LAX 01:39 · JFK 04:39
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1