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

Php 在Excel中打开CSV时,某些字符未正确显示,php,excel,csv,encoding,character-encoding,Php,Excel,Csv,Encoding,Character Encoding,我知道有些人会认为这是一个重复的问题,但我尝试了stackoverflow上提供的所有解决方案 我的问题是,在excel中打开时,我无法在CSV中显示某些字符,但是记事本++正确显示了这些字符 记事本++输出: Excel输出: 我知道有些人会建议我显示一些标题&所以,我只是把这个CSV保存到服务器上。用户将在需要时使用FTP进行下载。这是因为文件的字符编码为UTF-8。Notepad++正确地检测到它,但是Excel没有字符编码检测,并且假设所有内容都是本地Windows编码 按照以下步骤使用

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

我的问题是,在excel中打开时,我无法在CSV中显示某些字符,但是记事本++正确显示了这些字符

记事本++输出:

Excel输出:


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

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

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

打开MicrosoftExcel2007。 单击数据菜单栏选项。 单击“从文本”图标。 导航到要导入的文件的位置。单击文件名,然后单击导入按钮。文本导入向导-步骤1或步骤3窗口现在将出现在屏幕上。 选择最能描述数据分隔或固定宽度的文件类型。 从文件源旁边出现的下拉列表中选择65001:Unicode UTF-8。 单击下一步按钮显示文本导入向导-步骤2或步骤3窗口。 在要导入Microsoft Excel 2007的文件中使用的分隔符旁边打勾。“数据预览”窗口将根据您选择的分隔符显示数据的显示方式。 单击“下一步”按钮显示文本导入向导-第3步,共3步。 为要导入的每列数据选择适当的数据格式。如果需要,您还可以选择不导入一列或多列数据。 单击“完成”按钮以完成将数据导入Microsoft Excel 2007。
如果您需要一种编程方法来实现这一点,那么最好的方法是在CSV文件的最开始添加BOM字符。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);

也许Excel的编码是非常错误的?另外,您从何处保存CSV文件?如果notepad++正确地打开它,文件的编码应该是正确的,可能是excel没有正确地解释它。也许这会有帮助:@briosheje这很好,但我不能要求用户这样做。他很想打开这个文件。有什么编程方法可以解决这个问题吗?我很感谢你的回答,我也尝试过了。它工作得很好,但我需要一种编程方法来解决这个问题。所以,我不能接受。太好了。这很有魅力。谢谢你的帮助