【问题标题】:’ instead of ' in Natural Reader after encoding with utf-8用 utf-8 编码后,在 Natural Reader 中用 ' 而不是 '
【发布时间】:2017-09-24 11:32:56
【问题描述】:

我有一些从网上得到的文字。处理后写入txt文件,带有

text_file = open("input.txt", "w")
text_file.write(finaltext.encode('utf-8'))
text_file.close()

当我打开 txt 文件时,一切都很好。但是当我将它加载到自然阅读器中以变成音频时。我看到 ’ 而不是 ' 只是在一些而不是所有 '

怎么办?

【问题讨论】:

  • 是的,最初的 a-macron 是一个明确的信号,表明您已将 utf-8 显示为与 iso-8859-1 相关的编码之一。很可能一些(但不是全部)单引号是倾斜引号而不是撇号。
  • Natural Reader 如何处理 Unicode?似乎它需要允许重音字符。

标签: python utf-8 encode


【解决方案1】:

如果您使用本机文本编辑器打开文件并且文件看起来不错,则问题可能出在您的其他程序没有正确检测编码和mojibaking 上。正如 cmets 中所提到的,它几乎肯定是 Unicode quote character,看起来像 ',但不是。

my_string = ('The Knights who say '
    '\N{LEFT SINGLE QUOTATION MARK}'
    'Ni!'
    '\N{RIGHT SINGLE QUOTATION MARK}'
)
def print_repr_escaped(x):
    print(repr(x.encode('unicode_escape').decode('ascii')))

print_repr_escaped(my_string)
# 'The Knights who say \\u2018Ni!\\u2019'

如果你不能控制其他程序的编码,你有2个选择:

  1. 删除所有 Unicode 字符 like so:

    stripped = my_string.encode('ascii', 'ignore').decode('ascii')
    print_repr_escaped(stripped)
    # 'The Knights who say Ni!'
    
  2. 尝试使用 Unidecode 之类的方式将 Unicode 字符转换为 ASCII

    import unidecode
    
    converted = unidecode.unidecode(my_string)
    print_repr_escaped(converted)
    # "The Knights who say 'Ni!'"
    

【讨论】:

  • 选项 2 有效。也许我错误地执行了选项 1,但它从文本中删除了 '
  • 这就是我所说的“删除字符”。该变量也称为stripped ;)
  • 如果这能让您解决眼前的问题,请不要反对,但这并不是一个理想的整体解决方案。并不是所有的 unicode 都可以折叠成 ASCII。花一些时间弄清楚如何告诉 Natural Reader 您的文件使用什么编码可能是值得的。
【解决方案2】:

如果您在 Windows 上,许多 Windows 应用程序假定文件使用本机 ANSI 编码,除非文件开头有字节顺序标记 (BOM)。 BOM 通常不是 UTF-8 所必需的,但可用作 Windows 上 UTF-8 文件的签名。您可以使用utf-8-sig 编解码器编写一个。以下将适用于 Python 2.x 和 3.x:

import io
with io.open("input.txt", "w", encoding='utf-8-sig') as text_file:
    text_file.write(finaltext)

【讨论】:

    猜你喜欢
    • 2016-09-11
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2012-03-24
    • 2015-12-07
    • 1970-01-01
    相关资源
    最近更新 更多