我有一个返回utf-16编码字符串的函数,我必须通过替换将其结果包含在另一个字符串中:
string = myfunc()
debug_string = debug_string.replace("$rep$", string)
在我的eclipse环境中它工作正常,但在另一个环境中它会出错:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe0' in position 23: ordinal not in range(128)
你知道可能的原因是什么吗?
由于
答案 0 :(得分:2)
您的string
变量不是Unicode?然后,您需要显式解码从string
(字符串类型)到Unicode对象的字节序列(以UTF-16编码):
u_string = myfunc().decode('utf-16')
debug_string
也应该是Unicode。
答案 1 :(得分:0)
尝试:
string = myfunc()
debug_string = debug_string.replace("$rep$", string).encode('utf-16')
或者:
string = myfunc()
debug_string = debug_string.replace("$rep$", string).decode('utf-16')
答案 2 :(得分:0)
如果可能,请一直使用unicodes。如果您无法更改myfunc
,请至少将其结果转换为unicode:
string = myfunc().decode('utf-16')
如果您的debug_string
已经是unicode,则无需更改任何其他内容。否则使用适当的编解码器对其进行解码。