’ 在自然读取器中用utf8编码后,而不是'

2024-04-23 23:57:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我从网上得到一些信息。处理后,它被写入txt文件

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

当我打开txt文件时,一切正常。但当我把它加载到自然阅读器中变成音频。我只看到了’而不是{}只在一些而不是所有{}上看到

怎么办?在


Tags: 文件texttxt信息closeinputopen音频
2条回答

如果您使用本机文本编辑器打开文件,并且看起来很好,那么问题可能是您的其他程序没有正确地检测到编码并mojibaking。正如评论中提到的,几乎可以肯定的是一个看起来像'但不是的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'

如果无法控制其他程序的编码,则有两个选项:

  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!'"
    

如果您在Windows上,许多Windows应用程序都假定文件采用本机ANSI编码,除非文件开头有字节顺序标记(BOM)。对于UTF-8,BOM通常不需要,但在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)

相关问题 更多 >