繁体   English   中英

Python编码人名

[英]Python Encoding person names

我正在将数据加载到以utf-8编码的postgresdwh中,其中包括个人信息-包括名字,姓氏和地址。 这些值可以包含德语字符(如umlauts )以及法语字符(如é, â, à等)。将数据从Excel文件中读取到数据框中,然后推入postgresql数据库中。 我以前曾使用以下行规避编码错误。 因此,例如在名字值上:

df = pd.read_excel(dir_path, encoding='utf-8-sig')

df['fname'] = df['fname'].apply(lambda x: x.encode('windows-1252'))

我现在遇到了引发了另一个错误的法语字符:

DataError('(psycopg2.DataError) invalid byte sequence for encoding "UTF8": 0xe9 0x20 0x20

我已将编码更改为:

df['fname'] = df['fname'].apply(lambda x: x.encode('utf-8-sig'))

但是,将脚本保持原样不会加载带有德语字符的值。 我以为windows-1252用于西欧语言,应该能够处理所有这些特殊字符。 是否有适用于所有这些语言的替代编码? 还是我需要根据处理后的值更改编码?

即使您没有显示DataError的来源,也很清楚:“无效字节序列”问题肯定与数据解码而不是编码的位置有关

因此,如果您显示的两行都是与编码有关的所有内容,则该异常发生在第一个( pd.read_excel )中。 如第二行(在lambda表达式中),当您编码时 ,您不会收到与无效字节序列有关的问题。

显然,特定输入使用UTF-8编码(带有或不带有BOM)。 确认:

>>> b'\xe9\x20\x20'.decode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 0: invalid continuation byte

但是,根据给定的信息(法语和德语字符,序列b'\\xe9\\x20\\x20' ,Windows),实际编码的不错猜测是CP-1252或Latin-9(ISO 8859-15)。 在他们两个中,结果是相同的:

>>> b'\xe9\x20\x20'.decode('cp1252')
'é  '
>>> b'\xe9\x20\x20'.decode('latin9')
'é  '

因此,请尝试以下操作:

df = pd.read_excel(dir_path, encoding='windows-1252')

如果不适用于所有输入,则可能必须对编码进行参数设置,并为每个输入文件进行相应设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM