将 CSV 文件上传到 postgres DB 时 python 出现 UnicodeEncode 错误

UnicodeEncode error in python when uploading CSV file to postgres DB

尝试使用 Python2.7

将 CSV 文件上传到 Postgres 数据库时,我不断收到 UnicodeEncode 错误

首先,我创建了 CSV 格式的文件。该文件有非拉丁字符,这就是为什么我下载它并对它有字符串的第二列进行编码的原因:

writer = csv.writer(response, dialect='excel')
writer.writerow(tuple(corresponding_data[btn]["columns"].split(',')))

 for row in rows:
        field_1 = row[0]
        field_2 = row[1].encode(encoding='UTF-8')
        fields = [field_1, field_2]
        writer.writerows([fields])

文件创建没有错误。当我在 Excel 中打开它时,我看到有一些值,例如:Dajï¿ï¿

为了上传文件并将其保存在 Postgres 的 table 中,我使用了名为:CSVKit 的 python 模块。

我就是这样做的:

import codecs
f = codecs.open(absolute_base_file, 'rb', encoding='utf-8')
delimiter = ","
no_header_row = False
try:
    csv_table = table.Table.from_csv(f, name=table_name_temp, no_header_row=no_header_row, delimiter=delimiter)

尽管我指定了编码,但我一直收到错误消息:

<type 'exceptions.UnicodeEncodeError'>

我不知道还能在这里尝试什么。

已编辑

检查数据库中的值后,我发现它们实际上没有任何非拉丁字符,但有些值带有空格,当我保存它们时,它们会被统一编码(空格)。 我认为这就是导致问题的原因。

您可以尝试使用 unicodecsv 而不是内置的 csv

毕竟,在将值写入 CSV 之前,我已经将它们展平了。 我使用 unidecode 模块如下:

from unidecode import unidecode

for row in rows:
        field_1 = row[0]
        field_2 = unidecode(row[1]).encode(encoding='UTF-8') # LINE CHANGED
        fields = [field_1, field_2]
        writer.writerows([fields])
    return response

虽然不是永久性的解决方案,但这暂时解决了我的问题。