前言:我知道有关此主题的类似问题,并尝试了他们的解决方案,但无济于事。
我正在创建一个 python 脚本来从 ftp 地址获取 JSON 文件,将其转换为 Pandas 数据帧,然后将其发送到 MySQL 以填充表。但是,我遇到了 Pandas.to_sql 的问题。错误是:
UnicodeEncodeError: 'ascii' codec can't encode character '\xd1' in position 87: ordinal not in range(128)
这是我的代码:
import pandas as pd
import json
from sqlalchemy import create_engine
cnx = create_engine('mysql://username:password@192.168.1.11/database?charset=utf8',encoding='utf-8')
sl1 = pd.read_json('ftp://username:password@ftp.address.com/directory/sailings_cel.txt')
sl1 = pd.json_normalize(sl1["Dataset"])
sl1.to_sql(name='celsailingtemp',con=cnx,if_exists='append',index=True)
可能有用的信息:
我已经尝试了多种排列,以确保在 create_engine 语句中将编码设置为 utf-8,按照 StackOverflow 上的类似问题。
JSON 文件在 FTP 服务器上提供,扩展名为 .txt,但我认为应该没问题,因为它由 read_json 和 json_normalize 处理得很好。
根据https://www.utf8-chartable.de/unicode-utf8-table.pl?unicodeinhtml=hex,看起来 xd1 可能是 Ñ 字符。果然,在行程栏里就能找到违规角色。
说到列,JSON 数据结构如下所示。将 json_normalize 级别设置为“数据集”会将嵌套的“行程”列降级为长字符串,这对我来说没问题。我已在 mysql 端将该列的类型设置为“JSON”。
MySQL 表结构如下所示:
我可能可以简单地删除行程列,但核心编码问题不会得到解决,我想正确执行此操作。
任何有关此问题的指导将不胜感激!
幕布斯6054654
慕标琳琳
墨色风雨
相关分类