在Excel中显示阿拉伯字符的CSV文件变成了符号

19
我正在使用Python从Twitter提取阿拉伯语推文并将其保存为CSV文件,但是当我在Excel中打开保存的文件时,阿拉伯语显示为符号。然而,在Python、记事本或Word内部,它看起来很好。 请问问题出在哪里?

2
告诉Excel使用正确的编码打开它。 - Sami Kuhmonen
从Python(或其他语言)导出CSV会生成一个UTF-8格式的文件。但是Excel尝试以不同的格式ISO-8859-1读取。因此,必须手动选择打开格式。为了避免这种情况,可以使用一些Excel特定的库,如XLSX。 - DumTux
如果您提供一些详细信息会很有帮助。您使用的Python/Excel版本是什么?您使用的操作系统是什么?您能提供您正在使用的代码吗? - JerodG
8个回答

48

这是我在使用 Microsoft Excel 打开包含阿拉伯字符的 CSV 文件时经常遇到的问题。请尝试以下解决方法,我已在 Windows 和 MacOS 上的最新版本的 Microsoft Excel 上进行了测试:

  1. 打开 Excel 并创建一个空白工作簿

  2. 数据 选项卡中,单击 从文本 按钮(如果未激活,请确保选择了一个空单元格)

  3. 浏览并 选择 CSV 文件

  4. 在文本导入向导中,将 文件源 改为 "Unicode (UTF-8)"

  5. 继续,从 分隔符 中选择您的文件中使用的定界符,例如逗号

  6. 完成 并选择导入数据的位置

阿拉伯字符应该会正确显示。


2
谢谢,它有效了,但是现在又出现了另一个问题,所有的文字都在一列中。 :( - Shams
这意味着未选择适当的分隔符。请检查第5步并选择您文件中使用的分隔符,例如逗号、分号、制表符等。 - mohd4482
对于旧版的 MS Excel,在另存为“CSV”时没有自定义文件选项的选项。简单来说,解决方案是将“XLSX”文件另存为“TXT(Unicode UTF-8)”。生成的文件将是“TAB”分隔符。如果您想要逗号分隔,请在记事本中打开该文件(在 VS Code 中打开大文件),并将“TAB”出现替换为“,”,然后另存为“CSV”。 - Ahmed El-Atab
你的评论与问题无关,问题是关于打开CSV文件而不是保存它们。不过还是谢谢你的评论。 - mohd4482

14

只需使用 encoding='utf-8-sig',而不是 encoding='utf-8',如下所示:

import csv

data = u"اردو"

with(open('example.csv', 'w', encoding='utf-8-sig')) as fh:
    writer = csv.writer(fh)
    writer.writerow([data])

它在我的电脑上运行正常。


它运行得非常完美。 - Nemra Khalil

2

最快的方法是在Python中将文件保存为.csv格式后:

  1. 使用Notepad++打开.csv文件
  2. 从编码下拉菜单中选择UTF-8-BOM
  3. 点击“另存为”,以相同名称保存为.csv扩展名(例如data.csv),并保持文件类型为.txt
  4. 再次使用Microsoft Excel打开文件。

1
如果你正在使用pandas并将文件数据保存为CSV格式,你可能需要告诉可执行程序(例如:MS Excel)以UTF-8编码打开它,但是要做到这一点有一个技巧。
不要这样做:
      encoding='utf-8'

做这个:-
    encoding='utf-8-sig'

使用这种方法将以正确的阿拉伯语保存文件,您的可执行应用程序(如MS Excel)将能够正确打开它。
注意:为了安全起见,如果您从xlsx或cab中读取阿拉伯语数据,然后将其保存在其他地方,请确保在pandas中使用encoding='utf-8-sig'。
希望能解决您的问题!!
开心编码,朋友们。和平✌️

1

我不确定这是解决方案,但它可能会有所帮助。

enter image description here


1

我发现从Python保存阿拉伯语到Excel文件的唯一解决方案是使用pandas并保存为xlsx扩展名,而不是csv。xlsx在这里好得多,以下是我编写的代码,对我有用:

import pandas as pd
def turn_into_csv(data, csver):
    ids = []
    texts = []
    for each in data:
        texts.append(each["full_text"])
        ids.append(str(each["id"]))

    df = pd.DataFrame({'ID': ids, 'FULL_TEXT': texts})
    writer = pd.ExcelWriter(csver + '.xlsx', engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1', encoding="utf-8-sig")

    # Close the Pandas Excel writer and output the Excel file.
    writer.save()

0

众所周知,Excel 的 csv 导入系统很糟糕。简而言之,如果在同一系统上导入刚刚导出的 csv 文件,则会顺利进行。否则,csv 文件应使用 Windows 系统编码和分隔符。

一种相当笨拙但稳健的系统是使用 LibreOffice 或 Oracle OpenOffice。它们在任何功能方面都远远超过 Excel,但不包括 csv 模块:它们将允许您指定 csv 文件的分隔符和可选引用字符以及编码,并且您将能够将生成的文件保存为 xslx。


0

尽管我的CSV文件编码是UTF-8,但明确地再次使用记事本解决了它。

步骤:

  • 在记事本中打开您的CSV文件。
  • 单击“文件”-->“另存为...”
  • 在“编码”下拉菜单中,选择UTF-8。
  • 使用.csv扩展名重命名您的文件。
  • 单击保存。
  • 使用Excel重新打开文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接