使用php将Excel导出为UTF-8格式的CSV

4
Below are my code used to generate csv file. 
My problem is UTF-8 characters  are not coming correctly.
even I tried iconv also, but  no result.

PHP CODE
-----------------

$con = mysql_connect('localhost', 'root', ''); $db_selected = mysql_select_db('test', $con); mysql_query("SET NAMES utf8"); $qry_res = mysql_query("SELECT * FROM table 2");

$filename = "test.csv";
$fp = fopen('php://output', 'w');
//$header = array('id','name');
$header = array("Id","Name");
header('Content-type: application/csv;charset=utf-8');
header('Content-Disposition: attachment; filename='.$filename);
fputcsv($fp, $header);

while($data = mysql_fetch_row($qry_res)){
  fputcsv($fp, $data);
}

 exit;
------------------------------------------
Table value:
-----------------------
Id  Name
2   traducción de idiomas
3   תרגום שפות
4   language translation
7   Tłumaczenie na język

Result:
Id  Name
2   traducción de idiomas
3   ????? ????
4   language translation 
7   T?umaczenie na j?zyk

Thanks in advance.

不确定。使用Content-Type“text/csv;charset=UTF-8”作为应用程序表示未加密的二进制数据。输出编码似乎是单字节的Latin-1。您可能想在内容开头写入BOM,以进行Windows下的Unicode标识:U+FEFF,在Java中为 "\ufeff" ,PHP中则需要注意。 - Joop Eggen
Excel 在处理 UTF-8 编码时非常糟糕;你最好的选择可能是生成一个 UTF-8 CSV 文件(似乎你正在这样做),然后在 Excel 中进行数据导入。你可以在导入文件时指定文件的字符编码……或者使用类似 Open Office 的软件。 - CD001
3个回答

14

尝试在标题后添加以下内容:

echo "\xEF\xBB\xBF";  // BOM header UTF-8

你试过了吗,@Sakthi? - KiwiJuicer
它运行得很好。 对于回复晚了,我很抱歉。 谢谢。 - Sakthi
谢谢回复。你可能想把这个作为正确答案,祝好。 - KiwiJuicer

0

如果您的原始数据是UTF-8编码,将数据导出为CSV / Excel可读格式的最佳方法是转换您的数据。

$chain1 = iconv("UTF-8", "ISO-8859-15", 'érase camión del niño'); 
$chain2 = iconv("UTF-8", "cp1252", 'érase camión del niño'); 
echo $chain1.$chain2;

那对我有用。


0
假设您的数据库中的数据是UTF格式,那么您需要修改生成文档的方式。
在我的代码中,我用iconv替换了一个简单的echo。
// echo $csv;

echo iconv("UTF-8", "ISO-8859-2", $csv);

Excel假设ISO。需要明确的指示将其转换为UTF。每次都对我有效。

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