Я не знаю Perl, поэтому отвечаю за Python.
Python не знает, что входной текст в Unicode. Вам нужно явно декодировать из UTF-8 или что-то еще, в Unicode. Затем вы можете использовать обычные средства обработки текста Python для его обработки.
http://docs.python.org/howto/unicode.html
Вот простая программа на Python 2.x, которую вы можете попробовать:
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
Копирует строки из стандартного ввода и преобразует каждую строку в Unicode. Кодировка указана как UTF-8. Затем for ch in u_line
устанавливает ch
для каждого символа. Тогда print ch,
- это простой способ в Python 2.x напечатать символ с пробелом без возврата каретки. Наконец, голый print
добавляет возврат каретки.
Я до сих пор использую Python 2.x для большей части своей работы, но для Unicode я бы порекомендовал вам использовать Python 3.x. Уникод действительно улучшен.
Вот версия вышеуказанной программы на Python 3, протестированная на моем компьютере с 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
По умолчанию Python 3 предполагает, что вход кодируется как UTF-8. По умолчанию Python затем декодирует это в Unicode. Строки Python 3 всегда Unicode; есть специальный тип bytes()
, используемый для строкового объекта, который содержит не-Unicode значения («байты»). Это противоположность Python 2.x; в Python 2.x базовый тип строки представлял собой строку байтов, а строка Юникода была новой особой вещью.
Конечно, нет необходимости утверждать, что кодировка UTF-8, но это хороший простой способ документировать наши намерения и убедиться, что значение по умолчанию не изменилось каким-либо образом.
В Python 3 print()
теперь является функцией. И вместо этого несколько странного синтаксиса добавления запятой после оператора print, чтобы заставить ее печатать пробел вместо новой строки, теперь есть аргумент именованного ключевого слова, который позволяет изменить конечный символ.
ПРИМЕЧАНИЕ: Изначально у меня был голый оператор print
после обработки строки ввода в программе Python 2.x и print()
в программе Python 3.x. Как отметил Дж.Ф. Себастьян, код печатает символы из строки ввода, а последний символ будет новой строкой, поэтому в дополнительном операторе печати нет необходимости.