2016-03-01 2 views
4

У меня действительно простая программа, которую я написал, чтобы сообщить мне значения unicode для некоторых символов.Юникод-символы неправильно печатаются в терминале python

Вот программа:

#!/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, и он также выглядит так, с символом, который должен быть напечатан первым, который будет напечатан последним. Это заставляет меня думать, что он правильно печатается, но не отображается правильно. Что может случиться?

+0

какая версия Python вы используете? Если вы используете python2, ваш код должен исправить ошибку –

+0

@PadraicCunningham, учитывая, что нет никакого 'u' перед тем, что явно является Unicode, но оно все еще дает правильный результат от' ord', я бы сказал, что это Python 3. Какая под-версия Я не знаю. –

+0

@MarkRansom, я хотел быть вдвойне уверен, если результат не соответствует, и это python3, тогда кодировка более чем вероятна. –

ответ

0

Просто замените первую строку как:

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

В Python 3 это не обязательно, и на самом деле это будет сбой в более ранних версиях. –

+0

Он отлично работает для меня в версии 2.7, почему он не работает, если это строки в unicode? На самом деле это сбой, если это не строки Unicode. – olofom

+0

Это не имеет значения, и, как @MarkRansom сказал, что это не нужно в python 3, поскольку python 3 обрабатывает строки как unicode по умолчанию – guribe94

3

Права выравнивания поведение символов иврита может быть изменено с помощью Unicode ЛЕВОГО ПРАВОЙ ПРИОРИТЕТ (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 Terminal):

‭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))) 
+0

Вместо 'chr (0x202D)' вы могли бы использовать '' \ u202d''. –

Смежные вопросы