如何在Python中遍历给定编码的每个字符?
有没有办法遍历给定编码中的每一个字符,并打印出它的编码值?比如说,UTF8编码?
4 个回答
1
对于单字节编码,你可以使用:
''.join(chr(x) for x in range(256)).decode(encoding, 'ignore')
这样可以得到一个包含所有在这个编码中有效字符的字符串。
对于固定大小的多字节编码,仔细使用 struct.pack()
来代替 chr()
应该是可行的。
6
兄弟,你知道Unicode里有多少个字符编码点吗...
顺便提一下,来自Python文档的内容:
这个函数会返回一个字符串,表示Unicode编码点为整数i的字符。比如,
chr(97)
会返回字符串'a'
,而chr(8364)
会返回字符串'€'
。这个函数的作用正好和ord()
相反。这个函数的参数有效范围是从0到1,114,111(在十六进制中是0x10FFFF)。如果i超出了这个范围,就会抛出
ValueError
错误。
所以
import sys
for i in range(sys.maxunicode + 1):
char = chr(i)
print(repr(char)) # print('\ud800') causes a UnicodeEncodeError
6
所有的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])
建议:可以先在一些小的编码上试试,比如cp1252
。把标准输出重定向到一个文件里。