在终端python

时间:2016-03-01 19:37:51

标签: python python-3.x unicode printing

我写了一个非常简单的程序,告诉我某些字符的unicode值。

以下是该计划:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

characters = [u'T', u'ב', u'€', u'木', u'♥']

for character in characters:

    print(character + " has the unicode value :\t"+str(hex(ord(character))) + "\n")

并给出了这个输出:

T has the unicode value :   84

ב has the unicode value :   1489

€ has the unicode value :   8364

木 has the unicode value :   26408

♥ has the unicode value :   9829

我注意到在我复制和粘贴时输出格式正确但在我的计算机上第二行在终端中显示如下

has the unicode value : 1489 ב 

我也尝试将输出放入文件并使用vim查看文件,它也看起来像这样,应该首先打印的字符最后打印。这使我认为它打印正确但没有正确显示。什么可能导致这种情况发生?

2 个答案:

答案 0 :(得分:3)

使用Unicode LEFT-RIGHT OVERRIDE(LRO)字符0x202D可以覆盖希伯来字符的右对齐行为。

characters = [u'T', u'ב', u'€', u'木', u'♥']

for character in characters:

    print(chr(0x202D) + character + " has the unicode value :\t"+str(hex(ord(character))) + "\n")

给(在OS X终端上):

‭T has the unicode value :  0x54

‭ב has the unicode value :  0x5d1

‭€ has the unicode value :  0x20ac

‭木 has the unicode value :  0x6728

♥ has the unicode value :   0x2665

感谢@ guribe94确定问题。

您可能会发现字符串格式更容易阅读:

    print("%s%s has the unicode value :\t 0x%04x\n" %
        (chr(0x202D), character, ord(character)))

答案 1 :(得分:0)

只需将第一行替换为:

characters = [u'T', u'ב', u'€', u'木', u'♥']