Python 将变量类型转换为unicode字符串

Python 将变量类型转换为unicode字符串,python,unicode,encoding,utf-8,int,Python,Unicode,Encoding,Utf 8,Int,我正在寻找一种方法将变量(可以是ASCII字符串、带有额外字符(如:)的unicode字符串、浮点数或整数)转换为unicode字符串 variable.encode('utf-8')其中variable是一个整数,导致AttributeError:'int'对象没有属性'encode' str(variable).encode('utf-8')其中variable是字符串。导致UnicodeDecodeError:'ascii'编解码器无法解码位置0处的字节0xc2:序号不在范围内(128)

我正在寻找一种方法将变量(可以是ASCII字符串、带有额外字符(如:)的unicode字符串、浮点数或整数)转换为unicode字符串

variable.encode('utf-8')
其中
variable
是一个整数,导致
AttributeError:'int'对象没有属性'encode'

str(variable).encode('utf-8')
其中
variable
是字符串
导致
UnicodeDecodeError:'ascii'编解码器无法解码位置0处的字节0xc2:序号不在范围内(128)


有没有一种简单的方法可以实现我在Python2.7中想要的功能?或者我必须检查变量的类型并以不同的方式处理它吗?

编码永远不会产生
unicode
对象。您可以将字节解码为
unicode

因此,您可以通过解码将其转换为
str
(一个字节字符串),然后转换为
unicode

str(obj).decode('utf8')
对于已经是
unicode
值的对象,这仍然会失败,因此您可能希望使用
try..except
来捕捉这种情况:

try:
    obj = str(obj).decode('utf8')
except UnicodeEncodeError:
    # already unicode
    pass

如果您尝试对字节字符串进行编码,Python 2会首先隐式地为您解码为
unicode
,这就是为什么您会得到
UnicodeDecodeError

这是一篇老文章,但我遇到了完全相同的问题:/I最终使用了
unicode
函数。这是一个内置函数,你可以阅读它

因此,唯一的变化是代替
str(theThing)
您可以使用
unicode(theThing)
,正如文档中所述,它的行为与
str
类似,只是它转换为unicode字符串而不是ascii字符串


作为一个警告,如果你正在使用某种文件写入或其他东西,你可能也会遇到问题,或者至少我遇到了:D和fixed-mine转换为str(obj)会造成unicode字符的问题,因此你不能只使用str('some unicode char'))@OMID.:这就是为什么有一个
try…除了
案例来准确地抓住这个问题。在Python2中,对于bytestring,
str(“一些编码非ASCII码点的字节”)
就可以了。对于
unicode
对象,
str(u'unicode string with non-ASCII codepoints')
实际上会失败,但异常处理程序正好适用于这种情况。对于OP的确切示例,这是错误的:带有非ASCII字节的bytestring,如
“£”
。如果您已经有unicode字符串,你必须对此进行测试;因为这是唯一的例外,所以使用
str(…).decode(…)
进行其他任何操作都比较容易。我不太喜欢python,但是如果你看一下(第一段的“here”链接),文档非常清晰,至少在Python2.7中,这个函数就是为了达到这个目的而存在的。当您传入包含非ASCII字节的内容时,问题就会出现,这将导致解码失败。