Я не знаю Perl, поэтому я отвечаю за Python.
Python не знает, что входной текст находится в Юникоде. Вам нужно явно декодировать из 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. Материал Unicode действительно улучшен.
Вот версия 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 основной тип строки был строкой байтов, а строка Unicode была особой новой вещью.
Конечно, нет необходимости утверждать, что кодировка UTF-8, но это простой способ документировать наши намерения и убедиться, что значение по умолчанию не изменилось каким-то образом.
В Python 3, print()
теперь функция. И вместо этого довольно странного синтаксиса добавления запятой после оператора печати, чтобы заставить его печатать пробел вместо новой строки, теперь есть аргумент именованного ключевого слова, который позволяет вам изменить символ конца.
ПРИМЕЧАНИЕ: Первоначально у меня был голый оператор print
после обработки входной строки в программе Python 2.x и print()
в программе Python 3.x. Как отметил J.F.Sebastian, код печатает символы из строки ввода, а последний символ будет символом новой строки, поэтому на самом деле нет необходимости в дополнительной заявке на печать.
'$ sed 's /./&/g' <<<" одобрение за "' 'о д о б р е н и е з а' –
@ Игнасио Васкес-Абрамс: 'sed 's /./&/g'' не работает для графемов (имеет значение, если текст содержит комбинированные символы, например, «Солженицын»). В Perl Python можно решить с помощью '/ \ X /' regex. – jfs