gpt4 book ai didi

python - 如何使用 Unicode 编码创建临时文件?

转载 作者:IT老高 更新时间:2023-10-28 20:51:16 26 4
gpt4 key购买 nike

当我使用 open() 打开文件时,我无法编写 unicode 字符串。我了解到我需要使用 codecs 并使用 Unicode 编码打开文件(参见 http://docs.python.org/howto/unicode.html#reading-and-writing-unicode-data )。

现在我需要创建一些临时文件。我尝试使用 tempfile 库,但它没有任何编码选项。当我尝试使用 tempfile 在临时文件中写入任何 unicode 字符串时,它会失败:

#!/usr/bin/python2.6
# -*- coding: utf-8 -*-
import tempfile
with tempfile.TemporaryFile() as fh:
fh.write(u"Hello World: ä")
fh.seek(0)
for line in fh:
print line

如何在 Python 中使用 Unicode 编码创建临时文件?

编辑:

  1. 我使用的是 Linux,我收到的代码错误消息是:

    Traceback (most recent call last):
    File "tmp_file.py", line 5, in <module>
    fh.write(u"Hello World: ä")
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 13: ordinal not in range(128)
  2. 这只是一个例子。在实践中,我正在尝试编写一些 API 返回的字符串。

最佳答案

其他人的答案都是正确的,我只是想澄清一下这是怎么回事:

字面量'foo'和字面量u'foo'的区别在于前者是字节串,后者是Unicode对象。

首先,了解 Unicode 是字符集。 UTF-8 是编码。 Unicode 对象与前者有关——它是一个 Unicode 字符串,不一定是 UTF-8 字符串。在您的情况下,字符串文字的编码将是 UTF-8,因为您在文件的第一行中指定了它。

要从字节字符串中获取 Unicode 字符串,请调用 .encode() 方法:

>>>> u"ひらがな".encode("utf-8") == "ひらがな"
True

同样,您可以在 write 调用中调用您的 string.encode,并达到与仅删除 u 相同的效果。

如果您没有在顶部指定编码,假设您正在从另一个文件中读取 Unicode 数据,您将指定它在到达 Python 字符串之前的编码。这将决定它如何以字节表示(即 str 类型)。

那么,您得到的错误仅仅是因为 tempfile 模块需要一个 str 对象。这并不意味着它不能处理 unicode,只是它希望你传入一个字节字符串而不是一个 Unicode 对象——因为没有你指定编码,它不知道如何将其写入临时文件。

关于python - 如何使用 Unicode 编码创建临时文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10490816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com