ASCII解码错误,即使一切都是Unicode(Python 2.7)



我在数据流(Apache Beam)中运行一个脚本,它在Python 2.7.12中运行,并使用Unicode字符串进行一些文本处理。

在处理中,我执行以下操作,其中名词短语是 unicode(我认为...

# -*- coding: utf-8 -*-
...
key = u"{}_{}".format(
    noun, phrase.replace(u" ", u"_")
)

但是,它会产生 ascii 解码错误

'ascii' codec can't decode byte 0xe2 in position 1: ordinal not in range(128)

我可以进行调试并获得用作名词短语的字符串的回复,但我目前没有它们,因为我的日志记录没有输出它们。

我不明白ASCII解码错误,因为我认为我很具体,我想要Unicode的所有内容!

你能给出一些提示,或者我应该回来提供有关输入字符串的更多信息吗?

好的,所以你的字符串中有一个非ASCII字符。您需要直接将phrase转换为 unicode

 phrase.decode('latin-1')

unicode.format中操作之前

一位

同事提醒我,我总是可以将整个输出解码为我选择的任何格式,在这种情况下是关键。

key = u"{}_{}_{}_{}".format(
     business_unit_id, date, noun, phrase.replace(u" ", u"_")
    ).encode('ascii', 'ignore')

在这种情况下,我想要 ASCII 输出,而不关心缺少的字符,例如💩.

如果我想用 Unicode 输出,我也可以使用 ...).encode('utf-8')

就我而言,我选择了ASCII输出,因为Apache Beam中的管道似乎对其map中的Unicode键不满意 减少管道

最新更新