Python 将变量类型转换为unicode字符串
我正在寻找一种方法将变量(可以是ASCII字符串、带有额外字符(如:)的unicode字符串、浮点数或整数)转换为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)
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字节的内容时,问题就会出现,这将导致解码失败。