使用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
相关产品推荐
相关产品推荐

