我的Excel文档包含一个包含中文字符的数据表。我正在尝试将此Excel电子表格导出为CSV文件,以便导入MySQL数据库。
但是,当我将Excel文档另存为CSV文件时,记事本会将生成的CSV文件的中文字符显示为问号。导入MySQL会保留问号,完全忽略原始汉字的内容。
我怀疑这可能与使用带有UTF-8编码的Excel有关。谢谢你的帮助!
答案 0 :(得分:9)
据我所知,Excel不会以任何Unicode编码保存CSV文件。我最近有类似的问题尝试使用£符号将文件导出为CSV。我的好处是可以完全使用其他工具。
我的Excel 2010版本可以以Unicode格式File > Save As > Unicode Text (.txt)
导出,但输出是制表符分隔的UCS-2编码文件。我根本不知道MySQL,只是简单地看一下规范,它似乎处理制表符分隔的导入和UCS-2。可能值得尝试这个输出。
编辑:此外,您始终可以在Notepad ++中打开此Unicode输出,将其转换为UTF-8 Encoding > Convert to UTF-8 without BOM
并可能用逗号替换所有选项卡字符(在扩展搜索模式下使用替换对话框,{{1} }在“查找”框中和“替换”框中的\t
。)
答案 1 :(得分:7)
以下方法已经过测试并用于在MongoDB中导入CSV文件,因此它应该可以工作:
在Excel工作表中,转到文件>另存为。
命名文件并从“另存为类型”旁边的下拉列表中选择Unicode文本(* .txt),然后单击“保存”。
使用首选的文本编辑器打开unicode .txt文件,例如记事本。
由于我们的unicode文本文件是制表符分隔文件,我们想将Excel转换为CSV(逗号分隔)文件,我们需要用逗号替换所有制表符。
选择一个标签字符,右键单击它并从上下文菜单中选择复制,或者只需按下CTRL + C,如下面的屏幕截图所示。
按CTRL + H打开“替换”对话框,然后将复制的选项卡(CTRL + V)粘贴到“查找内容”字段中。执行此操作时,光标将向右移动,表示已粘贴选项卡。在替换为字段中键入逗号,然后单击全部替换。
点击文件>另存为,输入文件名并将编码更改为UTF-8。然后单击“保存”按钮。
直接在记事本的另存为对话框中将.txt扩展名更改为.csv,然后选择保存类型旁边的所有文件(。),如下面的屏幕截图所示。
单击文件>从Excel打开CSV文件;打开>文本文件(.prn,.txt,.csv)并验证数据是否正常。
来源here
答案 2 :(得分:3)
您可能想尝试记事本++,我怀疑记事本会支持unicode字符。
答案 3 :(得分:1)
对于某些人来说,此解决方案可能有效:https://support.geekseller.com/knowledgebase/utf-8/
保存 csv 时,转到右下角的工具 > Web 选项 > 编码 > Unicode (UTF-8)
或者这个 SO 答案:只需使用 Google Sheets 将 csv 保存为 unicode: Excel to CSV with UTF8 encoding
答案 4 :(得分:0)
我已经为我的数据尝试了所有上述方法,但它对我的数据不太适用(简体中文,超过700Mb。我尝试过Windows中文和英文系统,英文和中文优秀.Windows excel似乎无法保存甚至它声称这样做。我指定uft8 csv保存为,但是当我使用“打开表单”来检测编码方法时,它不是uft8,也不是GB *。 这是我的最终解决方案。
(1)下载'打开表格。
(2)正确打开它。您可以滚动编码方法,直到看到预览窗口中显示的中文字符。
(3)将其保存为utf-8(如果你想要utf-8)。
PS:您需要找出系统中的默认编码。目前 据我所知,Ubuntu处理UTF8很好。但Windows默认 Simplied Chinese是从GB **开始的。即使你把它编码为utf8, 不过,你也可以直接打开它。在我的情况下,r不能 打开我的utf-8 csv,但可以打开GB *编码。
即使您的文件非常大,此方法也能正常运行。 其他一些工作是谷歌表(但文件大小可以限制)。 Notepad ++也适用于较小的文件。
有一种方法可以通过打开文件并滚动编码方法来检测编码方法,直到您看到正确显示中文。
答案 5 :(得分:0)
您应使用以下命令保存csv文件:
df.to_csv(file_name, encoding = 'utf_8_sig')
代替:
df.to_csv(file_name, encoding = 'utf-8')