Python 3 + FDB:UnicodeDecodeError
Python 3 + FDB: UnicodeDecodeError
我想连接到使用 cp1251 的 Firebird 2.1 数据库,执行语句并获取结果。
这是我的做法:
import fdb
def get_zone(reg, sps):
con = fdb.connect(
dsn='172.16.16.77:database',
user='SYSDBA', password='1234',
sql_dialect=3, charset='WIN1251'
)
cur = con.cursor()
select = ("SELECT ZONE "
"FROM ZONES "
"WHERE ZONE_NAME LIKE "
+ reg[1:-3] + "% "
"AND ZONE < 600000 "
"AND ZONE NAME CONTAINING 'СПС'")
if not sps:
select = select[:-16] + 'NOT' + select[-17:]
cur.execute(select)
return cur[0]
cur.execute(select)
中断并出现错误 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf0 in position 0: unexpected end of data
我想知道两件事:
- 如何消除错误
- 在访问
WIN1251
编码的数据库时,Python 3 主要使用 Unicode 是否危险?如果是这样,请指导我 do/avoid/etc.
@VivekSable 问题:在错误之前 select
变量包含以下字符串:
SELECT ZONE FROM ZONES WHERE ZONE_NAME LIKE 'Краснодарский кр%' AND ZONE < 600000 AND ZONE NAME CONTAINING 'СПС'
发送到 WIN1251
数据库的任何查询字符串最初应使用 .encode('cp1251')
方法进行处理。
我想连接到使用 cp1251 的 Firebird 2.1 数据库,执行语句并获取结果。 这是我的做法:
import fdb
def get_zone(reg, sps):
con = fdb.connect(
dsn='172.16.16.77:database',
user='SYSDBA', password='1234',
sql_dialect=3, charset='WIN1251'
)
cur = con.cursor()
select = ("SELECT ZONE "
"FROM ZONES "
"WHERE ZONE_NAME LIKE "
+ reg[1:-3] + "% "
"AND ZONE < 600000 "
"AND ZONE NAME CONTAINING 'СПС'")
if not sps:
select = select[:-16] + 'NOT' + select[-17:]
cur.execute(select)
return cur[0]
cur.execute(select)
中断并出现错误 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf0 in position 0: unexpected end of data
我想知道两件事:
- 如何消除错误
- 在访问
WIN1251
编码的数据库时,Python 3 主要使用 Unicode 是否危险?如果是这样,请指导我 do/avoid/etc.
@VivekSable 问题:在错误之前 select
变量包含以下字符串:
SELECT ZONE FROM ZONES WHERE ZONE_NAME LIKE 'Краснодарский кр%' AND ZONE < 600000 AND ZONE NAME CONTAINING 'СПС'
发送到 WIN1251
数据库的任何查询字符串最初应使用 .encode('cp1251')
方法进行处理。