【问题标题】:How to open a text file that has emojis in it?如何打开包含表情符号的文本文件?
【发布时间】:2021-02-12 03:55:04
【问题描述】:

我正在尝试做最简单的事情,打开一个文件,在 python 中读取并关闭它。简单的。好吧,这是代码:

name_file = open("Forever.txt", encoding='UTF-8')
data = name_file.read()
name_file.close()

print (data)

我知道这些文本中有表情符号,比如心等。问题是,这个表情符号不像 U+2600 这样的 unicode 语法,它们被放置为小图像。我认为以下错误是因为这个小图像:

return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\U0001f681' in         
position 2333: character maps to <undefined>

我尝试了以下方法,但没有指定编码:

name_file = open("Forever.txt")

错误变成了这样:

UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 2303: character maps to <undefined>

不知道为什么会这样。

也许一种解决方案是将测试的所有内容保存在一个变量中,然后删除其余的...嗯。

【问题讨论】:

  • 您的文件实际上不包含图像。您的文件包含文本。您的文本编辑器可能会选择将某些字符显示为图像。请注意这种区别。
  • 是的,我想过。感谢您的提示
  • Unicode \U0001f681 不是图像,它是完全有效的字符代码。也许你的 Python 已经过时了。表情符号是最近才添加的,Python 可能会检查你的输入是否有它认为无效的条目。

标签: python unicode encoding


【解决方案1】:

您收到UnicodeEncodeError,可能来自您的print 声明。该文件正在被正确读取和解释,但您只能打印控制台编码和字体实际支持的字符。该错误表示当前编码不支持该字符。

例如:

Python 3.3.5 (v3.3.5:62cf4e77f785, Mar  9 2014, 10:35:05) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print('\U0001F681')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\\Python33\lib\encodings\cp437.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\U0001f681' in position 0: character maps to <undefined>

但是打印一个终端编码支持的字符,它可以工作:

>>> print('\U000000E0')
à

我的控制台编码是cp437,但如果我使用支持 UTF-8 编码的 Python IDE,那么它可以工作:

>>> print('\U0001f681')
?

您可能会或可能不会正确看到该角色。您需要使用支持该字符的字体;否则,你会得到一些默认的替换字符。

【讨论】:

  • 我认为这是一个非常准确的回答。我试过这个 print('\U000000E0') 并且它有效,所以你是完全正确的。如果你有任何想法,你能告诉我如何为我的洞文本文件解决这个问题吗?非常感谢
  • 最简单的方法是使用支持 UTF-8 编码的 Python IDE,然后找到支持所有你关心的字符的字体。 Windows 控制台没有良好的字体或 UTF-8 支持。
  • 我在 pycharm 中运行它。我应该寻找支持这个的字体
【解决方案2】:

没有看到您的输入文件,很难猜测它实际上是什么编码。包含“小图像”的文本文件不是对文件格式的有意义描述,尽管我猜您的文件实际上是 UTF-8编码,因为使用该编码打开它是有效的。打印数据失败,因为您的标准输出的编解码器(可能是您终端的编解码器)无法对表情符号进行编码。如果您的终端支持该编码,您可以尝试使用 UTF-8 显式编码:

sys.stdout.buffer.write(data.encode('utf-8'))

如果您的终端不支持能够显示表情符号的编解码器,那么这是您的终端的固有限制,您在 Python 代码中无能为力。

【讨论】:

    猜你喜欢
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2015-02-22
    • 2019-07-31
    • 1970-01-01
    相关资源
    最近更新 更多