1

我在 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 的使用方式,以便它可以读取整个字符串?其他一切似乎都可以正常工作,只是描述不可靠。

4

1 回答 1

2

您的字符串以 UTF-16LE 编码。你想调用类似的东西Cname.raw.decode('utf_16le').rstrip('\x00')。这将返回一个 Python 字符串,然后您可以随意使用它。

于 2014-11-14T04:20:40.280 回答