2015-01-18 6 views
0

Я хочу напечатать все символы полной ширины в консоли Python.Есть ли более простой способ изменить 0xff01 на \ uff01?

import re 
for i in list(range(65281,65375)): 
    x=hex(i) 
    x='\\u'+re.search('.{4}$',x).group() 
    x.encode("latin1").decode("unicode-escape") 

Я хочу сделать это проще; важным ключом является изменение 0xff01 на \\uff01, вот мой способ сделать преобразование.

x='0xff01' 
'\\u'+re.search('.{4}$',x).group() 

Есть ли более простой способ сделать это?

+0

просто делать ' "\\ и {}" Формат (гекс (I) [2:])... кодируют ("latin1") декодирования («unicode-escape») ' – thefourtheye

+2

Почему бы не просто« x = chr (i) »? –

+1

@thefourtheye: для форматирования hex используйте '' \\ u {: 04x} '. Format (i) 'вместо этого. Не нужно использовать 'hex()' там. Но кодировать, а затем декодировать в unicode-побег ... просто переборщить. –

ответ

4

Ваш код выводит одиночные символы Unicode из целых чисел, в очень круговой путь. Используйте chr() function вместо:

for i in range(65281, 65375): 
    x = chr(i) 

Обратите внимание, что list() вызова является очень избыточен и расточительно здесь; Я удалил его.

Из документации:

Возвращает строку, представляющую символ, код которого Unicode точка является целым числом я. Например, chr(97) возвращает строку 'a'.

Демо:

>>> [chr(i) for i in range(65281, 65375)] 
['!', '"', '#', '$', '%', '&', ''', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~'] 

Если вы действительно хотите, чтобы произвести избежали\uhhhh последовательности (без интерпретации их в реальных кодовых), используйте str.format() для форматирования целых чисел в шестнадцатеричные значения 4-значные:

for i in range(65281, 65375): 
    x = '\\u{:04x}'.format(i) 

ведущий 0 делает формат нулями, 4 устанавливает тьфу Ширина Л.Д. до 4-х символов, и x производит шестнадцатеричные символы:

>>> ['\\u{:04x}'.format(i) for i in range(65281, 65375)] 
['\\uff01', '\\uff02', '\\uff03', '\\uff04', '\\uff05', '\\uff06', '\\uff07', '\\uff08', '\\uff09', '\\uff0a', '\\uff0b', '\\uff0c', '\\uff0d', '\\uff0e', '\\uff0f', '\\uff10', '\\uff11', '\\uff12', '\\uff13', '\\uff14', '\\uff15', '\\uff16', '\\uff17', '\\uff18', '\\uff19', '\\uff1a', '\\uff1b', '\\uff1c', '\\uff1d', '\\uff1e', '\\uff1f', '\\uff20', '\\uff21', '\\uff22', '\\uff23', '\\uff24', '\\uff25', '\\uff26', '\\uff27', '\\uff28', '\\uff29', '\\uff2a', '\\uff2b', '\\uff2c', '\\uff2d', '\\uff2e', '\\uff2f', '\\uff30', '\\uff31', '\\uff32', '\\uff33', '\\uff34', '\\uff35', '\\uff36', '\\uff37', '\\uff38', '\\uff39', '\\uff3a', '\\uff3b', '\\uff3c', '\\uff3d', '\\uff3e', '\\uff3f', '\\uff40', '\\uff41', '\\uff42', '\\uff43', '\\uff44', '\\uff45', '\\uff46', '\\uff47', '\\uff48', '\\uff49', '\\uff4a', '\\uff4b', '\\uff4c', '\\uff4d', '\\uff4e', '\\uff4f', '\\uff50', '\\uff51', '\\uff52', '\\uff53', '\\uff54', '\\uff55', '\\uff56', '\\uff57', '\\uff58', '\\uff59', '\\uff5a', '\\uff5b', '\\uff5c', '\\uff5d', '\\uff5e'] 
Смежные вопросы