2015-01-11 117 views
0

这段python 2.7代码首先正确地打印“1”,但随后会以“10”为基础引发int值为“ValueError:invalid literal:''”。将unicode的字符串表示形式转换为unicode

num = '\x001\x00' 
print num 
print int(num) 

我想这个问题是type(num) == <type 'str'>,所以我其实没有为“1”的unicode字符串,但其中包含一个字符串“1”的Unicode表示ASCII字符串。我有没有得到那个权利?

无论如何,我如何将num转换为int()将识别的格式?

+1

问题是'\ x00'字符。字符串'1'可以转换为数字'1',但是什么数字是\ x001 \ x00'应该是? –

回答

4

\x00字节是这里的问题,而不是unicode与字符串值。你可以去除那些关:

int(num.strip('\x00')) 

int()只接受包含数字的字符串,或许一个小数点,符号(+-)和空白。 NULL字节不是空格,即使您的终端在打印时忽略它们。

1

代码出现要正确打印1,因为您的终端会忽略在1之前和之后打印的二进制零。

要正确地将字符串转换为数字,首先需要知道字符串的格式。例如,如果格式使得数字的文本表示被二进制零包围,则可以使用Martijn's answer中的代码对其进行转换。否则,struct模块是这种转换的有用的常规工具。

相关问题