我在数据流(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键不满意 减少管道