No sé Perl, entonces estoy respondiendo por Python.
Python no sabe que el texto de entrada está en Unicode. Necesita decodificar explícitamente desde UTF-8 o lo que sea que realmente sea, a Unicode. Entonces puede usar cosas normales de procesamiento de texto Python para procesarlo.
http://docs.python.org/howto/unicode.html
Aquí es un simple programa de Python 2.x para que usted intente:
import sys
for line in sys.stdin:
u_line = unicode(line, encoding="utf-8")
for ch in u_line:
print ch, # print each character with a space after
Esto copia líneas de la entrada estándar, y convierte cada línea a Unicode. La codificación se especifica como UTF-8. Luego for ch in u_line
establece ch
para cada personaje. Luego, print ch,
es la manera más fácil en Python 2.x para imprimir un personaje, seguido de un espacio, sin retorno de carro. Finalmente, un print
desnudo agrega un retorno de carro.
Todavía uso Python 2.x para la mayoría de mi trabajo, pero para Unicode recomendaría que use Python 3.x. Las cosas Unicode realmente han mejorado.
Aquí está la versión de Python 3 del programa anterior, probado en mi computadora con Linux.
import sys
assert(sys.stdin.encoding == 'UTF-8')
for line in sys.stdin:
for ch in line:
print(ch, end=' ') # print each character with a space after
De manera predeterminada, Python 3 supone que la entrada está codificada como UTF-8. Por defecto, Python luego decodifica eso en Unicode. Las cadenas de Python 3 son siempre Unicode; hay un tipo especial bytes()
usado para un objeto tipo cadena que contiene valores no Unicode ("bytes"). Esto es lo opuesto a Python 2.x; en Python 2.x, el tipo de cadena básica era una cadena de bytes, y una cadena Unicode era algo nuevo especial.
Por supuesto, no es necesario afirmar que la codificación es UTF-8, pero es una forma sencilla y agradable de documentar nuestras intenciones y asegurarse de que el valor predeterminado no se modifique de alguna manera.
En Python 3, print()
ahora es una función. Y en lugar de la extraña sintaxis de agregar una coma después de una declaración de impresión para imprimir un espacio en lugar de una línea nueva, ahora hay un argumento de palabra clave con nombre que le permite cambiar el carácter final.
NOTA: Originalmente tenía una declaración print
desnuda después de manejar la línea de entrada en el programa Python 2.x, y print()
en el programa Python 3.x. Como señaló J.F. Sebastian, el código está imprimiendo caracteres desde la línea de entrada, y el último carácter será una nueva línea, por lo que realmente no es necesario el enunciado de impresión adicional.
'sed 's /./&/g' <<< "одобрение за"' ' о д о б р е н и е з а' –
@Ignacio Vazquez-Abrams $: 'sed 's /./&/g'' no funciona para grafemas (es importante si un texto contiene caracteres combinados, por ejemplo, '" Солженицын "'). En Perl, Python se puede resolver usando '/ \ X /' regex. – jfs