Python: запись в файл диакритических знаков в качестве последовательности escape-символов - PullRequest
0 голосов
/ 18 декабря 2018

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

-pokaż wszystko-
–ყველას გამოჩენა–

, и я должен написать в другой файл примерно так:

-poka\017C wszystko-
 \2013\10E7\10D5\10D4\10DA\10D0\10E1 \10D2\10D0\10DB\10DD\10E9\10D4\10DC\10D0\2013

Мой скрипт Python запускаетсячто:

file_input = open('input.txt', 'r', encoding='utf-8')
file_output = open('output.txt', 'w', encoding='utf-8')

К сожалению, запись в файл - это не то, что он ожидает.

Я получил подсказку, почему я должен изменить его, но не могу понять преобразование:

Диакритические знаки, сохраненные в UTF-8 ("-pokaż wszystko-"), работают правильно, только если NLS_LANG = AMERICAN_AMERICA.AL32UTF8

Если в выходном файле есть диакритические знаки, сохраненные в экранирующей форме ("-poka\ 017C wszystko- "), скрипт работает корректно для любых настроек NLS_LANG

1 Ответ

0 голосов
/ 18 декабря 2018

Решение Python 3.6 ... форматировать символы вне диапазона ASCII:

#coding:utf8
s = ['-pokaż wszystko-','–ყველას გამოჩენა–']

def convert(s):
    return ''.join(x if ord(x) < 128 else f'\\{ord(x):04X}' for x in s)

for t in s:
    print(convert(t))

Вывод:

-poka\017C wszystko-
\2013\10E7\10D5\10D4\10DA\10D0\10E1 \10D2\10D0\10DB\10DD\10E9\10D4\10DC\10D0\2013

Примечание: я не знаю, хотите ли вы или как вы хотите обрабатыватьСимволы Юникода вне базовой многоязычной плоскости (BMP,> U + FFFF), но этот код, вероятно, не будет обрабатывать их.Вам нужна дополнительная информация о ваших требованиях к escape-последовательности.

...