Как заменить unicode символы символами ASCII в Python (данный сценарий жемчуга)?

Я пытаюсь изучить Python и не мог выяснить, как перевести следующий сценарий жемчуга в Python:

#!/usr/bin/perl -w                     

use open qw(:std :utf8);

while(<>) {
  s/\x{00E4}/ae/;
  s/\x{00F6}/oe/;
  s/\x{00FC}/ue/;
  print;
}

Сценарий просто изменяется, unicode умляуты к альтернативному ASCII производят. (Таким образом, полный вывод находится в ASCII), я был бы благодарен за любые подсказки.Спасибо!

22
задан Frank 23 April 2010 в 18:01
поделиться

2 ответа

  • Используйте модуль fileinput для перебора стандартного ввода или списка файлов,
  • декодируйте строки, которые вы читаете из UTF- 8 в объекты Unicode
  • , затем сопоставьте любые символы Unicode, которые вы хотите, с помощью метода translate

translit.py , это будет выглядеть так:

#!/usr/bin/env python2.6
# -*- coding: utf-8 -*-

import fileinput

table = {
          0xe4: u'ae',
          ord(u'ö'): u'oe',
          ord(u'ü'): u'ue',
          ord(u'ß'): None,
        }

for line in fileinput.input():
    s = line.decode('utf8')
    print s.translate(table), 

И вы можете использовать его так:

$ cat utf8.txt 
sömé täßt
sömé täßt
sömé täßt

$ ./translit.py utf8.txt 
soemé taet
soemé taet
soemé taet
  • Обновление:

Если вы используете Python 3, строки по умолчанию являются Unicode, и вам не нужно кодировать их, если они содержат символы, отличные от ASCII, или даже нелатинские символы. Таким образом, решение будет выглядеть следующим образом:

line = 'Verhältnismäßigkeit, Möglichkeit'

table = {
         ord('ä'): 'ae',
         ord('ö'): 'oe',
         ord('ü'): 'ue',
         ord('ß'): 'ss',
       }

line.translate(table)

>>> 'Verhaeltnismaessigkeit, Moeglichkeit'
17
ответ дан 29 November 2019 в 03:42
поделиться

Для преобразования в ASCII вы можете попробовать ASCII, черт возьми или этот рецепт , который сводится к :

>>> title = u"Klüft skräms inför på fédéral électoral große"
>>> import unicodedata
>>> unicodedata.normalize('NFKD', title).encode('ascii','ignore')
'Kluft skrams infor pa federal electoral groe'
40
ответ дан 29 November 2019 в 03:42
поделиться