如何使Python 3.4 c_char_array读取字符串为两个字节?

时间:2014-11-14 00:31:48

标签: python ctypes pypyodbc

我在Ubuntu 12.04上使用pypyodbc和Python 3.4。

我试图获取列名,但有些事情有点不可思议。回来的只是作为字节的第一个字符,如下所示:

(Pdb) Cname.value
b'T'

幕后的东西是一个ctypes char数组:

(Pdb) Cname
<ctypes.c_char_Array_1024 object at 0xb6a1ad1c>

但如果我查看原始值:

(Pdb) Cname.raw
b'T\x00Y\x00P\x00E\x00_\x00N\x00A\x00M\x00E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00

您可以看到值TYPE_NAME\x00分隔。

所以在我看来,正在发生的事情是什么(ctypes?)首先读取\x00作为字符串的空终止符而不是部分字符。

我可以做些什么来修改ctypes的使用方式,以便它能读取整个字符串?其他所有东西似乎都很好,它只是简单的描述。

1 个答案:

答案 0 :(得分:2)

您的字符串以UTF-16LE编码。你想打电话给Cname.raw.decode('utf_16le').rstrip('\x00')。这将返回一个Python字符串,您可以随意使用它。