2010-04-27 15 views
9

Si trato de pegar un carácter Unicode, como el punto medio:¿Por qué no puedo mostrar un carácter Unicode en Python Interpreter en Mac OS X Terminal.app?

·

en mi intérprete de Python no hace nada. Estoy usando Terminal.app en Mac OS X y cuando estoy simplemente en bash no tengo problemas:

:~$ · 

Pero en el intérprete:

:~$ python 
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 

^^ no consigo nada, simplemente ignora que acabo de pegar al personaje. Si utilizo el escape \ representación Xnn \ Xnn del punto medio '\ xc2 \ xb7', y tratar de convertir a Unicode, tratando de mostrar el punto hace que el intérprete de lanzar un error:

>>> unicode('\xc2\xb7') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128) 

tengo configurar 'utf-8' como mi codificación predeterminada en sitecustomize.py entonces:

>>> sys.getdefaultencoding() 
'utf-8' 

¿Qué ocurre? No es la Terminal. No es Python, ¿qué estoy haciendo mal?

Esta pregunta no está relacionada con este question, ya que indivdiual puede pegar unicode en su terminal.

+0

Tengo el mismo problema, pero la codificación predeterminada es ascii (no sé por qué): (( – DataGreed

Respuesta

6

unicode('\xc2\xb7') significa decodificar la cadena de bytes en cuestión con el códec predeterminado, que es ascii - y eso por supuesto falla (intentar establecer una codificación predeterminada diferente nunca funcionó bien, y en particular no se aplica a " literales pegados "- eso requeriría configuración diferente de todos modos). Se podría usar en su lugar u '\ xc2 \ xb7', y ver:

>>> print(u'\xc2\xb7') 
· 

ya que esos son dos caracteres Unicode, por supuesto. Si bien:

>>> print(u'\uc2b7') 
슷 

le da un carácter Unicode (de un poco de persuasión oriental - lo siento, soy ignorante de estas cosas). Por cierto, ninguno de estos es el "punto medio" que estabas buscando. Tal vez quiere decir

>>> print('\xc2\xb7'.decode('utf8')) 
· 

cuales es el punto medio. Por cierto, para mí (Python 2.6.4 de python.org en un Mac Terminal.app):

>>> print('슷') 
슷 

qué tipo de me sorprendió (que esperaba un error ... -!).

+0

Wow, si hay alguien a quien quiero responder una pregunta sobre Python cuando tengo uno, ¡es Alex Martelli! ¡Gracias! Tengo todos sus libros de Python. –

+2

Hrm, todo eso funcionó para mí y resolvió cierta confusión que tenía en Unicode frente a utf-8, pero todavía no puedo pegar un carácter Unicode en el intérprete de Python en Mac Terminal.app. Mi colega tampoco puede usar el shell de Apple predeterminado, pero puede hacerlo con la versión de Python en el puerto, supongo que es una aplicación o problema con el portapapeles. –

+2

'u '\ xc2 \ xb7'' no es lo mismo que' '\ xc2 \ xb7'.decode (' utf8 ') '/' unicode (' \ xc2 \ xb7 ',' UTF-8 ') '.El primero es una cadena Unicode de dos puntos de código (U + 00C2 (LETRA A MAYOR LATINA CON CIRCUNFLEX) y U + 00B7 (DOT MIDDLE)), este último evalúa como cadena Unicode con un único punto de código (U + 00B7 (MIDDLE DOT)); su codificación UTF-8 requiere dos bytes). 'u '\ uc2b7'' es (como se ilustra) algo completamente diferente: U + C2B7 (HANGUL SYLLABLE SEUS). –

Cuestiones relacionadas