强制字符集转换

时间:2013-01-14 09:14:22

标签: python character-encoding sqlalchemy

我有一个将数据写入Microsoft SQL Server的应用程序。数据库的字符集为CP1252,待保存的传入数据为UTF-8。数据可能包含无法转换为CP1252的字符,插入时会抛出异常。

数据库人员说我应该强行将数据压缩到CP1252,如下所示:

some_value = some_value.encode('CP1252', 'replace')

但是SQLAlchemy会自动进行转换,我看不到强制转换的方法。

engine = sqlalchemy.create_engine('mssql+pyodbc://...'
    encoding='CP1252',
    convert_unicode=True,
    )

保存数据至关重要,即使有一些缺少的字符也是如此。我该如何实现呢?请注意,在这种情况下我使用了大量的数据库反射。

1 个答案:

答案 0 :(得分:1)

我没有看到问题。

some_value = some_value.encode('CP1252', 'replace').decode('CP1252')

如果some_value实际上不是unicode字符串,而是原始UTF-8数据:

some_value = some_value.decode("utf-8").encode('cp1252', 'replace').decode('cp1252')