如何使用 Python 迭代给定编码中的每个字符?

Geo*_*Geo 4 python unicode encoding

有没有办法遍历给定编码中的每个字符,并打印它的代码?说,UTF8?

wic*_*ich 5

伙计,你知道unicode中有多少个代码点吗?

顺便说一句,来自 Python 文档:

chr ( i )

返回表示 Unicode 代码点为整数i的字符的字符串。例如,chr(97)返回字符串'a',而chr(8364)返回字符串'€'。这是 的倒数ord()

参数的有效范围是从 0 到 1,114,111(以 16 为底的 0x10FFFF)。ValueError如果i超出该范围,则将引发。

所以

import sys

for i in range(sys.maxunicode + 1):
    char = chr(i)
    print(repr(char))  # print('\ud800') causes a UnicodeEncodeError
Run Code Online (Sandbox Code Playgroud)

  • 所以,不要打印它 :) 不是我们所有的计算机都直接连接到行式打印机 :) 超过一百万?!你需要某种机器,比如电脑,来处理这么多数据!:) (3认同)
  • 您也不想自动执行它,它超过一百万个字符,需要一棵树来打印,实际上它被称为 unicode 标准书 ;) (2认同)

Joh*_*hin 5

所有 Unicode 字符都可以表示UTF-n为所有定义的n. 你想达到什么目的?

如果您真的想做一些事情,例如打印特定编码中的所有有效字符,而无需知道编码是“单字节”还是“多字节”,或者其大小是否固定:

import unicodedata as ucd
import sys

def dump_encoding(enc):
    for i in xrange(sys.maxunicode):
        u = unichr(i)
        try:
            s = u.encode(enc)
        except UnicodeEncodeError:
            continue
        try:
            name = ucd.name(u)
        except:
            name = '?'
        print "U+%06X %r %s" % (i, s, name)

if __name__ == "__main__":
    dump_encoding(sys.argv[1])
Run Code Online (Sandbox Code Playgroud)

建议:尝试一些小的东西,比如cp1252. 将标准输出重定向到文件。