繁体   English   中英

如何在 Python 2.7 中打印像“u{variable}”这样的 Unicode?

[英]How to print Unicode like “u{variable}” in Python 2.7?

例如,我可以打印 Unicode 符号,如:

print u'\u00E0'

或者

a = u'\u00E0'
print a

但看起来我不能做这样的事情:

a = '\u00E0'
print someFunctionToDisplayTheCharacterRepresentedByThisCodePoint(a)

主要用例将在循环中。 我有一个 unicode 代码点列表,我希望在控制台上显示它们。 类似的东西:

with open("someFileWithAListOfUnicodeCodePoints") as uniCodeFile:
    for codePoint in uniCodeFile:
        print codePoint #I want the console to display the unicode character here

该文件有一个 unicode 代码点列表。 例如:

2109
OOBO
00E4
1F1E6

循环应该输出:

℉
°
ä
🇦  

任何帮助将不胜感激!

这可能不是一个好方法,但这是一个开始:

>>> x = '00e4'
>>> print unicode(struct.pack("!I", int(x, 16)), 'utf_32_be')
ä

首先,我们得到由十六进制字符串x表示的整数。 我们将其打包成一个字节字符串,然后我们可以使用utf_32_be编码对其进行解码。

由于您经常这样做,因此可以预编译结构:

int2bytes = struct.Struct("!I").pack
with open("someFileWithAListOfUnicodeCodePoints") as fh:
    for code_point in fh:
        print unicode(int2bytes(int(code_point, 16)), 'utf_32_be')

如果你觉得更清晰,也可以直接用decode方法代替unicode类型:

>>> print int2bytes(int('00e4', 16)).decode('utf_32_be')
ä

Python 3 向int类添加了一个to_bytes方法,可以让您绕过struct模块:

>>> str(int('00e4', 16).to_bytes(4, 'big'), 'utf_32_be')
"ä"

你想要print unichr(int('00E0',16)) 将十六进制字符串转换为整数并打印其 Unicode 代码点。

警告:在 Windows 代码点上 > U+FFFF 将不起作用。

解决方案:使用 Python 3.3+ print(chr(int(line,16)))

在所有情况下,您仍然需要使用支持代码点字形的字体。

这些是 unicode 代码点,但缺少\\u\u003c/code> python unicode-escape。 所以,只要把它放在:

with open("someFileWithAListOfUnicodeCodePoints", "rb") as uniCodeFile:
    for codePoint in uniCodeFile:
        print "\\u" + codePoint.strip()).decode("unicode-escape")

这是否适用于给定系统取决于控制台的编码。 如果它是 Windows 代码页并且字符不在其范围内,您仍然会遇到奇怪的错误。

在python 3中,这将是b"\\\\u\u0026quot;

暂无
暂无

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

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