繁体   English   中英

在Python中打印所有unicode字符

[英]Printing all unicode characters in Python

我已经编写了一些代码来创建十六进制系统的所有4位数组合,现在我正在尝试使用它来打印出与这些值相关联的所有unicode字符。 这是我用来执行此操作的代码:

char_list =["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"]
pairs = []
all_chars = []

# Construct pairs list
for char1 in char_list:
    for char2 in char_list:
        pairs.append(char1 + char2)

# Create every combination of unicode characters ever
    for pair1 in pairs:
        for pair2 in pairs:
            all_chars.append(pair1 + pair2)

# Print all characters
for code in all_chars:
    expression = "u'\u" + code + "'"
    print "{}: {}".format(code,eval(expression))

以下是我收到的错误消息:

Traceback (most recent call last): File "C:\Users\andr7495\Desktop\unifun.py", 
line 18, in <module> print "{}: {}".format(code,eval(expression))
UnicodeEncodeError: 'ascii' codec can't encode character u'\x80' in position 0: 
ordinal not in range(128)

当代码尝试打印u“\\ u0080”时抛出异常,但是,我可以在交互式解释器中执行此操作而不会出现问题。

我已经尝试将结果转换为unicode并指定忽略错误,但它没有帮助。 我觉得我缺少对unicode如何工作的基本理解,但是我能做些什么来让我的代码打印出所有有效的unicode表达式?

import sys
for i in xrange(sys.maxunicode): 
  print unichr(i);

这可能是您的终端出现问题(cmd.exe在这方面非常糟糕),因为大多数情况下,当您“打印”您正在打印到终端并最终尝试进行编码时...如果您运行代码在空闲或其他可以渲染unicode的空间中,您应该看到字符。 你不应该使用eval试试这个

for uni_code in range(...):
    print hex(uni_code),unichr(uni_code)

您正在尝试将Unicode字符格式化为字节字符串。 您可以使用Unicode字符串来删除错误:

print u"{}: {}".format(code,eval(expression))
      ^

其他答案更能简化原始问题,但是你肯定是在艰难地做事。

以下是本文中重写的示例,它将列表保存到文件中。

Python 3.x:

import sys 
txtfile = "unicode_table.txt"
print("creating file: " + txtfile) 
F = open(txtfile, "w", encoding="utf-16", errors='ignore')
for uc in range(sys.maxunicode):
    line = "%s %s" % (hex(uc), chr(uc))
    print(line, file=F)
F.close()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM