You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pyodbc与XMP Toolkit添加元数据仅写入首字符的问题

解决XMP元数据仅写入首字符的问题

看起来你遇到的问题是pyodbc从FileMaker返回的字符串,虽然表面显示是完整的,但传入XMP库时只保留了第一个字符。这通常是因为pyodbc返回的并非标准的Python unicode字符串,而是某种数据库特定的字符类型对象,XMP库在处理时误将其当作了字符序列而非完整字符串。

下面是几个可行的解决方法:

方法1:显式转换为标准unicode字符串

在调用set_property之前,把row[0]转换为标准的unicode类型(Python 2环境)或者str类型(Python 3):

# Python 2
division_name = unicode(row[0])
# Python 3
division_name = str(row[0])

xmp.set_property(consts.XMP_NS_DC, u'DivisionName', division_name)

这样能确保传入的是XMP库可以正确识别的完整字符串对象。

方法2:检查pyodbc连接的字符编码配置

确保你的pyodbc连接字符串中包含了正确的字符编码参数,让数据库返回标准的unicode字符串。比如在连接时添加Unicode=True参数:

conn = pyodbc.connect("DRIVER={FileMaker ODBC};SERVER=your_server;DATABASE=your_db;UID=user;PWD=pass;Unicode=True")

这能从源头避免返回非标准的字符类型。

方法3:编码为字节串传入

如果XMP库期望的是字节串而非unicode字符串,可以将字符串编码为UTF-8字节串后传入:

division_name = row[0].encode('utf-8')
xmp.set_property(consts.XMP_NS_DC, u'DivisionName', division_name)

先排查问题根源

你可以先打印row[0]的类型和原始表示,确认是否是标准字符串:

print(type(row[0]))
print(repr(row[0]))

如果输出不是<type 'unicode'>(Python2)或<class 'str'>(Python3),而是类似pyodbc.SQLWCHAR之类的类型,那说明确实需要转换为标准字符串。

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:57:42