V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
myKing
V2EX  ›  Python

我有一个 unicode 的编码范围,请问用 Python 如何遍历打印出来?

  •  1
     
  •   myKing · 2018-08-31 14:15:44 +08:00 · 3893 次点击
    这是一个创建于 2036 天前的主题,其中的信息可能已经有所发展或是发生改变。
    \u0000-\u0040
    主要是用于正则,我想看看这个范围内是不是都是标点符号
    15 条回复    2018-08-31 17:21:57 +08:00
    chenstack
        1
    chenstack  
       2018-08-31 14:50:54 +08:00   ❤️ 1
    print(''.join(chr(u) for u in range(0, 0x41)))
    实际上\u0020-\u0040 才是,前面的基本是控制用 ascii
    shede333
        2
    shede333  
       2018-08-31 14:51:53 +08:00
    Unicode 每个字符的详情,可以查官方文档: https://www.unicode.org/charts/

    代码如下:

    def show_unicode_text(start_num, length):
    """
    打印 Unicode 字符串
    :param start_num: unicode 起始索引值(10 进制)
    :param length: 起始值之后,要打印的字符个数
    :return:
    """
    for index in xrange(start_num, start_num + length - 1):
    hex_str = str(hex(index))[2:]
    tmp_text = "\\U{:0>8}".format(hex_str)
    # tmp_text = "\\u{:0>4}".format(hex_str) # 仅支持 BMP 平面的字符
    dest_unicode = codecs.decode(tmp_text, "unicode_escape")
    print index, tmp_text, dest_unicode

    //\u0000-\u0040
    show_unicode_text(0, 41)

    # show 数字和大写字母
    show_unicode_text(48, 44)

    # show 部分表情
    show_unicode_text(128518, 10)
    myKing
        3
    myKing  
    OP
       2018-08-31 15:11:10 +08:00
    0x41 这个是什么??
    myKing
        4
    myKing  
    OP
       2018-08-31 15:11:37 +08:00
    @chenstack 0x41 这个是什么??
    chenstack
        5
    chenstack  
       2018-08-31 15:24:26 +08:00
    \u0040 这里 0040 就是 16 进制的,range 是左闭右开的,所以\u0020-\u0040 的码点范围是 range(0x00, 0x40+1)
    myKing
        6
    myKing  
    OP
       2018-08-31 16:11:01 +08:00
    @chenstack 如果是\u2190-\u21FF,那么如何遍历?
    myKing
        7
    myKing  
    OP
       2018-08-31 16:12:35 +08:00
    @chenstack x 这个是不是只能在第二位?还是有规律?
    imn1
        8
    imn1  
       2018-08-31 16:17:27 +08:00
    #1 就结帖了
    In [1]: chr(0x8888)
    Out[1]: '袈'
    In [2]: chr(0x2190)
    Out[2]: '←'
    rabbbit
        9
    rabbbit  
       2018-08-31 16:23:54 +08:00
    0b 二进制 0o 八进制 0x 16 进制
    0b10 // 2
    0o10 // 8
    0x10 // 16
    unicode 字符表示方法 \u + 16 进制数值,例如 \u0001
    print(u'\u0061') // a
    myKing
        10
    myKing  
    OP
       2018-08-31 16:40:11 +08:00
    @rabbbit 谢谢
    0b10
    0o10
    0x10 这种应该叫什么
    imn1
        11
    imn1  
       2018-08-31 16:55:00 +08:00
    你连最基础的整数进制都分不清,后面写程序很难的,先去看基础的书籍吧
    rabbbit
        12
    rabbbit  
       2018-08-31 17:04:14 +08:00
    0b10 是一个 2 进制数值
    前面的 0b 是一个固定的前缀,代表 2 进制数字. Python 识别到 0b 后, 会将其后的内容当作 2 进制来解析.例如
    0b11 // 3
    0b2 // SyntaxError 2 进制没有 2 这个字符,因此报错

    其他的也一样
    0o 是 8 进制数值的前缀
    0x 是 16 进制数值的前缀
    myKing
        13
    myKing  
    OP
       2018-08-31 17:14:08 +08:00
    @rabbbit 谢谢终于知道这个叫做进制数值
    myKing
        14
    myKing  
    OP
       2018-08-31 17:17:40 +08:00
    第一次使用 V2EX 我已经有答案,请问如何结束话题?

    python2 代码:

    for i in range(0x005b,0x005f):
    print (unichr(i))
    python3 代码请查看 http://www.chenxm.cc/post/683.html
    lululau
        15
    lululau  
       2018-08-31 17:21:57 +08:00
    python -c 'import os;os.system("ruby -e \"puts [*\\\"\\u0000\\\"..\\\"\\u0040\\\"]\"")'
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   981 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 20:26 · PVG 04:26 · LAX 13:26 · JFK 16:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.