如何将字符串转换为字节

时间:2014-06-02 20:38:01

标签: python python-2.7

我正在使用python v2.7.3并尝试转换工作但是遇到了一些问题。

这是以我希望的方式运行的代码:

testString = "\x00\x13\xA2\x00\x40\xAA\x15\x47"
print 'Test String:',testString 

这会产生以下结果

TestString: ¢@ªG

现在我加载与上面相同的字符串以及其他一些数据:

\x00\x13\xA2\x00\x40\xAA\x15\x47123456

进入SQLite3数据库,然后将其从数据库中拉出来:

cur.execute('select datafield from databasetable')
rows = cur.fetchall()
if len(rows) == 0:
    print 'Sorry Found Nothing!'
else:
    print row[0][:32]

然而,这会产生以下结果:

\x00\x13\xA2\x00\x40\xAA\x15\x47

我无法弄清楚如何将数据库存储的字符串转换为字节字符串,如果它就是这样,就像第一段代码那样。我实际上需要它加载到该格式的变量中,以便我可以将它传递给函数进行进一步处理。

以下我尝试过:

print "My Addy:",bytes(row[0][:32])
print '{0}'.format(row[0][:32]) 
...

他们都产生相同的结果......

首先,有谁能告诉我第一批结果的格式是什么?我认为它的字节格式但不确定。

其次,如何将数据库存储的文本转换为

任何帮助,我都会永远感激。

提前致谢,

1 个答案:

答案 0 :(得分:1)

问题是您没有正确地将值存储在数据库中。您希望存储一系列字节,但是您要存储这些字节的转义版本。

将字符串文字输入编程语言时,可以在源代码中使用转义码来访问非打印字符。这就是你在第一个例子中所做的事情:

testString = "\x00\x13\xA2\x00\x40\xAA\x15\x47"
print 'Test String:',testString 

但这是Python解释器在读取程序并执行它时完成的处理。

将数据库列更改为二进制blob而不是字符串,然后返回到您用于在SQLite3中存储字节的代码,并将其存储实际字节('ABC',3 bytes)而不是转义字符串('\x41\x42\x43',12个字符)。

如果您确实需要在SQLite3中存储转义字符串并在运行时转换它,您可以使用ast.literal_eval()将其评估为字符串文字。