【问题标题】:Python: Write to file diacritical marks as escape character sequencePython:写入文件变音符号作为转义字符序列
【发布时间】:2018-12-18 14:47:39
【问题描述】:

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

-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 设置

【问题讨论】:

  • 您有转义格式的规范吗?这并不熟悉。另外,动机是什么?您的输出字符编码是 UTF-8,因此您不需要转义。

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


【解决方案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 字符,但此代码可能无法处理它们。需要有关您的转义序列要求的更多信息。

【讨论】:

  • 感谢您的帮助。我会回答你的问题,但不幸的是我不知道如何处理。我被要求按照模式转换文本。
猜你喜欢
  • 2017-05-11
  • 2018-07-16
  • 2012-01-20
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多