在Excel中打开CSV时,某些字符无法正确显示

时间:2014-10-30 15:50:31

标签: php excel csv encoding character-encoding

我知道有些人会认为这是重复的问题,但我尝试了stackoverflow上提供的所有解决方案。

我的问题是,在excel中打开时我无法在CSV中显示某些字符,但notepad++正确显示。

Notepad ++输出:

enter image description here

Excel输出:

enter image description here

我知道有些人会建议我展示一些标题&所以,但我只是将这个CSV保存到服务器。用户将在需要时使用FTP下载它。

2 个答案:

答案 0 :(得分:7)

如果您需要编程方式来执行此操作,那么最好的方法是在CSV文件的最开头添加BOM字符。最新版本的Excel(Excel 2007 SP3或更高版本)会将此BOM字符解释为指示文件的其余部分为UTF-8并正确加载。

以下是PHP代码:

// generate $csv_content as usual
// fopen the file you want to write to in $csv
$BOM = "\xEF\xBB\xBF";
fwrite($csv, $BOM . $csv_content);
fclose($csv);

答案 1 :(得分:3)

这是因为您文件的字符编码是UTF-8。 Notepad ++正确检测到它,但Excel没有字符编码检测,并假设所有内容都是本地Windows编码。

按照下面列出的步骤使用Microsoft Excel 2007打开使用UTF-8字符编码的.csv文件:

  • 打开Microsoft Excel 2007.
  • 单击“数据”菜单栏选项。
  • 单击“从文本”图标。
  • 导航到要导入的文件的位置。单击文件名,然后单击“导入”按钮。文本导入向导 - 步骤1或3窗口现在将出现在屏幕上。
  • 选择最能描述数据的文件类型 - 分隔或固定宽度。
  • 从文件来源旁边的下拉列表中选择65001:Unicode(UTF-8)。
  • 单击“下一步”按钮以显示“文本导入向导 - 步骤2或3”窗口。
  • 在您要导入Microsoft Excel 2007的文件中使用的分隔符旁边放置一个复选标记。数据预览窗口将根据您选择的分隔符向您显示数据的显示方式。
  • 单击“下一步”按钮以显示“文本导入向导 - 第3步,共3步”。
  • 为要导入的每列数据选择适当的数据格式。如果需要,您还可以选择不导入一列或多列数据。
  • 单击“完成”按钮完成将数据导入Microsoft Excel 2007。