gpt4 book ai didi

将中文字符从 Oracle 导入 json.dump 时抛出 Python UnicodeDecodeError

转载 作者:行者123 更新时间:2023-12-01 04:00:19 25 4
gpt4 key购买 nike

我正在使用 pyodbc 从 Oracle DB 查询财务数据 - 每个字段都很好,并且可以转储为 json 数据,然后将其显示在网页上。

我似乎无法弄清楚第 17 个字段 - '\xab\xed\xa5\xcd\xab\xfc\xbc\xc6' 发生了什么 - 当我将其打印到屏幕上时,Python 显示正确的中文 - 但是当我输出它时,中文字符会在 json 转储中丢失,或者字符会引发以下错误。

我假设这是一个我应该解码然后重新编码的字节串,但是重新编码为 ascii 或 UTF8 总是会在这里抛出错误。

有人有建议可以帮助我吗?我花了几天时间阅读编码,但似乎仍然无法理解为什么抛出 utf-8 字符。

确切的错误是:“utf8”编解码器无法解码位置 0 中的字节 0xf9:无效的起始字节,并且它仅出现在我吐出到 JSON 的某些中文字符上 - 但没有任何字符加载 json 时查看正确。

for row in cur.fetchall(): 
print row
print row[17]
jsonData = json.dumps(row[17].decode('utf-8'), encoding='latin1')

这会产生以下输出:

> ('.HSI', 'HANG SENG INDEX', Decimal('1'), '+21316.47', '-21.34',
> '+1457369960', '0', '0', datetime.datetime(2016, 4, 18, 0, 0, 55),
> datetime.datetime(2016, 4, 15, 8, 1, 22), '+21423.06', '+21234.12',
> '344', Decimal('0'), '+21374.65', '+21337.81', '0',
> '\xf9\xda\xa5\xcd\xab\xfc\xbc\xc6', None, '+19163.8', '118', '-0.10',
> '+9.43', '+28588.52', '+18278.80', '-21.34', '0', '0', '0', '0',
> '-0.10', '\xab\xed\xa5\xcd\xab\xfc\xbc\xc6', '0', '0', '0', '0', '0',
> '0', '0', '0', '0', '0', '0#.HSI', Decimal('1'), '.HSI',
> datetime.datetime(2016, 4, 17, 23, 58, 18))
> 恒生指數
> return codecs.utf_8_decode(input, errors, True)
> UnicodeDecodeError: 'utf8' codec can't decode byte 0xf9 in position 0:
> invalid start byte

最佳答案

弄清楚了 - 这绝对只是一个编码问题 - 不知道我得到的字符编码是什么,就像每个帖子所说的那样,是过去几天我存在的祸根。我设法在主机上获得时间,经过大量阅读后,我检查了系统编码如下:

import sys
sys.stdout.encoding

返回:

> 'cp950'

然后我使用 ord() 吐出编码数据,为 JSON 转储做好准备:

outputStr = ''.join(chr(ord(c)) for c in s).decode('cp950')

关于将中文字符从 Oracle 导入 json.dump 时抛出 Python UnicodeDecodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36680494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com