gpt4 book ai didi

python - 修复由另一种语言引起的 Python Unicode 错误

转载 作者:太空狗 更新时间:2023-10-30 01:02:48 24 4
gpt4 key购买 nike

我收到这个错误:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 52-57: ordinal not in range(128)

导致错误的代码:

f.write(textwrap.dedent(unicode(the_string))

我要写的字符串是从一个包含英文和日文(用于测试)的网站上摘录的 外来词和名称的音译,例如コンピュータ(konpyūta,“计算机”)和ロンドン(Rondon,“伦敦” ”)。 (有些已经归化的外借可能无法用片假名呈现。)

在使用另一种语言(日语)的 Python 中处理字符串时。我如何解析它以防止错误并仍然保留字符串?

最佳答案

这里的问题是文件对象的 .write 方法天真地试图转换 unicode 字符串(如果你在 Python 2.x 中,这将是 unicode 类型),你使用 ASCII 编解码器将它传递给一个字节字符串(如果你在 Python 2.x 中,这将是 str 类型),但是你是传递不能使用 ASCII 表示,因为它具有不属于 ASCII 字符集的(日语)字符。

您需要使用unicode 字符串的.encode 方法将其转换为代表该字符串的一系列字节,然后才能保存它。这基本上就是 str 类型在 Python 2.x 中所表示的 - 只是一系列字节,不是您可能期望的一系列字符。不过,Python 很容易让您产生不同的想法,因为当您print 类型为 str 的变量时,Python 会使用系统的默认 unicode 编码。

您应该在此处使用何种编码来对字符串进行编码取决于您的用例。 UTF-8 是最常见的,您可能只是想使用它,但是如果您想确保您正在写入的文件将在同一系统的文本编辑器中正确显示,即使您在具有一个不太常见的系统编码,如 UTF-16,您可能想要使用系统的默认编码(如果系统具有无法对您的字符串进行编码的默认编码,这当然会失败)。

换句话说,您几乎肯定想要执行以下操作之一:

一)

f.write(textwrap.dedent(the_string).encode('utf-8'))

二)

import sys
f.write(textwrap.dedent(the_string).encode(sys.getdefaultencoding()))

如果您认为这是一件非常烦人且复杂的事情,需要您集中精力执行将一些非 ASCII 文本写入文件这一相当基本的任务,那么 - 我同意您的看法!当我开始使用 Python(这是我的第一门编程语言)时,我在理解 unicode、字符串编码以及与之相关的 Python 类型和方法方面遇到了很多困难。然而,复杂性并不是 Python 的错——这取决于计算机对文本进行编码的方式,特别是文本有多种编码不同系列的字节 可以表示相同系列的字符,具体取决于所使用的编码。这使得 Python 不可能像我一样(作为菜鸟)天真地希望和期望它会向您隐藏字符串编码的具体细节并“自动做一些明智的事情”。

如果您要编写大量代码,涉及从网络获取和使用可能包含非 ASCII 字符的文本数据,我建议您仔细阅读该主题并对其有深入的了解,无论是从一般角度还是特定于 Python 的角度。

关于python - 修复由另一种语言引起的 Python Unicode 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13500126/

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