【问题标题】:Python3 CSV encoding problemsPython3 CSV 编码问题
【发布时间】:2018-03-29 10:10:37
【问题描述】:

我正在尝试向 CSV 文件中的一行添加一些信息,但在更新后的 CSV 文件中,特殊字符(²、±)的编码不正确。让我澄清一下:

所以基本上我有一个带有以下示例行的 CSV 文件:

row = ["Some info", "Cell with special characters (², ±)", "Some more info"]

我正在尝试向第二列添加一些文本,所以我编写了以下代码

import csv
new_rows = []

# Open CSV file
with open('file_1.csv', 'r', encoding='UTF-8') as f1
    reader =  csv.reader(f1, delimiter=',')
    for row in reader:
        # Add text to cell, save row to memory
        row[1] = row[1] + " is causing trouble"
        new_rows.append(row)

# Write rows in new CSV-file
with open('file_2.csv', 'w', encoding='UTF-8', newline='') as of:
    writer =  csv.writer(of, delimiter=',')
    writer.writerows(new_rows)

我期望的第二列的输出如下:

"Cell with special characters (², ±) is causing troubles"

但我得到以下输出:

"Cell with special characters (??, ??) is causing troubles"

我尝试通过将编码更改为 Latin-1 来解决问题,甚至根本不提及代码中的编码,但似乎没有任何效果!

我在这里遗漏了什么或做错了什么?

【问题讨论】:

  • 我无法重现该错误。因此,您检查输出或环境的方式可能有问题。
  • 问题可能是您使用的是UTF-8,而特殊字符是ASC-II

标签: python-3.x csv encoding


【解决方案1】:

您的源文件可能是 latin-1,您在第二个文件中将 mojibakes 编码为 utf-8。您的代码没有任何问题。

您只需要在以良好编码读取源代码后决定是否要生成 latin1 或 utf-8 csv(并可能添加 BOM https://github.com/pyexcel/pyexcel-io/issues/30)作为目标(也许您可以使用十六进制转储进行检查它是如何编码的并给我们一些线索)。

【讨论】:

    猜你喜欢
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2015-08-25
    • 2021-02-26
    • 2021-02-09
    相关资源
    最近更新 更多