UnicodeDecodeError:正在将类型字符串转换为Unicode

2024-05-05 11:21:01 发布

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

我正在尝试替换文本。不幸的是,主字符串存储为unicode类型,但描述要替换的文本的字符串存储为string类型。以下是一个可复制的示例:

mystring = u'Bunch of text with non-standard character in the name Rubén'
old = 'Rubén'
new = u'newtext'
mystring.replace(old, new)

这将引发一个错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 3: ordinal not in range(128)

当我试图用unicode(old)old转换为unicode时,也会遇到同样的错误。有几个答案可以解决特定字符的问题,但我找不到通用的解决方案。在


Tags: of字符串textin文本示例类型new
1条回答
网友
1楼 · 发布于 2024-05-05 11:21:01

您需要使用显式的编解码器将old值转换为Unicode。该编解码器是什么完全取决于您如何获得old。在

如果它是源代码中的字符串文本,请使用源代码编码。除非在注释的顶部指定了有效的编解码器,否则Python不会接受源文件;请参见PEP 263

将您的old定义粘贴到终端将使用终端编解码器(当您粘贴时,终端发送Python编码的字节)。在

如果数据来自其他任何地方,则需要确定来自该源的编码。例如,对于HTTP数据,检查Content-Type报头中的charset参数。在

然后解码:

old = old.decode(encoding)

当您在没有显式编解码器的情况下使用unicode(old),或者尝试在unicode.replace()中使用bytestring时,Python使用默认的编解码器ASCII。在

在我的终端中演示,配置为使用UTF-8:

^{pr2}$

一般来说,您希望尽早解码,延迟编码;使数据流成为Unicode三明治。一旦收到文本,就将其全部解码为Unicode值,在数据离开程序之前不要再次编码。在

相关问题 更多 >