如何在 CSV 中处理 utf-8 不间断空格

How to handle utf-8 non-breaking spaces in CSV

提问人:dongle 提问时间:10/27/2023 更新时间:10/27/2023 访问量:63

问:

在我用来读取 XLSX 文件的 Python 脚本中。我移动了一些元数据,并最终写出一个新的 CSV。当我在 Microsoft Excel 中打开该 CSV 时,某个元数据字段中有空格被替换为以下字符:.这是一个之前和之后的例子......openpyxl†¬

之前 (XLSX):

list of items
1.     apple
2.     orange
3.     banana

之后(在 Excel 中查看的 CSV):

list of items
1.     apple
2.     orange
3.     banana

如果我在 Google 表格中打开 CSV,它会呈现得很好。如果我在Mac OS查找器中预览它,它看起来也不错。如果我在 Sublime Text 中将 CSV 视为纯文本,它看起来也不错。只有 Excel 才能以奇怪的方式呈现这些空格字符。查看 Sublime Text 中的数据似乎确实提供了提示......人们通常希望空格字符在选择它们时显示一个点,以便将它们与制表符空格区分开来。但是,当我选择这些空间时,Excel 错误地呈现的空间不会显示点,而它正确处理的一个空间确实按预期显示点。

enter image description here

查看该选择,人们可能会认为非带点的空格只是一个选项卡,但事实并非如此,您可以将光标移动四个增量,因此它似乎是四个空格。经过大量搜索,我终于发现我可以将这两个不同的空格复制并粘贴到 UTF-8 编码器中。这表明正确渲染的空间又名“空间”,而 Excel 遇到的问题是“不间断空间”。\x20\xc2\xa0

我想尽可能原始地保留原始/源元数据,所以我不倾向于用常规空格替换不间断空格,但是我应该在我的 Python 中这样做吗?该 unicode 字符是否容易被其他工具错误地呈现?难道这里还有什么更邪恶的事情发生在我身上,而我却错过了吗?

python excel csv utf-8

评论


答:

3赞 Mark Tolonen 10/27/2023 #1

Excel 根据 Windows 的本地化采用编码。如果 CSV 不是用该编码编写的,则会得到 mojibake。您的文件是用 UTF-8 编码编写的,这不是本地化的默认值。将 CSV 编写为 UTF-8 和 BOM,Excel 将识别 UTF-8 BOM 签名并使用 UTF-8 对文件进行解码。Python 具有用于此目的的编码。'utf-8-sig'

评论

1赞 dongle 10/27/2023
出于某种原因,我一直在尝试将编码添加到编写器中,但事实证明它进入了最初的“开放”,即 像魅力一样工作!finalcsv = open("metadata.csv", "w", encoding="utf-8-sig")