python - see - syntaxerror: non-ascii character
Literales Unicode que funcionan en python 3 y 2 (1)
Así que tengo un script de Python que preferiría que funcione en Python 3.2 y 2.7 solo por conveniencia.
¿Hay alguna manera de tener literales Unicode que funcionen en ambos? P.ej
#coding: utf-8
whatever = ''שלום''
El código anterior requeriría una cadena Unicode en python 2.x (u '''') y en python 3.x ese pequeño ''u'' causa un error de sintaxis.
De todos modos, encontré la respuesta, todo lo que necesitaba era:
from __future__ import unicode_literals
Todavía estoy publicando la pregunta debido a https://meta.stackexchange.com/questions/49922/should-i-continue-adding-a-question-if-i-have-found-the-answer-myself
Para los curiosos, esto es en lo que estoy trabajando: http://code.google.com/p/pytitle/
Editar - Desde Python 3.3, el u''''
literal funciona nuevamente, por lo que la función u()
no es necesaria.
La mejor opción es crear un método que cree objetos unicode a partir de objetos de cadena en Python 2, pero deje los objetos de cadena solo en Python 3 (ya que son unicode).
import sys
if sys.version < ''3'':
import codecs
def u(x):
return codecs.unicode_escape_decode(x)[0]
else:
def u(x):
return x
Entonces lo usarías así:
>>> print(u(''/u00dcnic/u00f6de''))
Ünicöde
>>> print(u(''/xdcnic/N{Latin Small Letter O with diaeresis}de''))
Ünicöde