Python:以转义字符序列的形式写入文件变音标记

时间:2018-12-18 14:47:39

标签: python-3.x oracle unicode utf-8 diacritics

我从输入文件中读取文本行,剪切后我得到了字符串:

-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 :(得分:1)

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)之外处理Unicode字符,但是此代码可能无法处理它们。需要有关您的转义序列要求的更多信息。