我在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的使用方式,以便它能读取整个字符串?其他所有东西似乎都很好,它只是简单的描述。
答案 0 :(得分:2)
您的字符串以UTF-16LE编码。你想打电话给Cname.raw.decode('utf_16le').rstrip('\x00')
。这将返回一个Python字符串,您可以随意使用它。