经过几个小时的研究后,我发布了这个(好几次......)。我还没找到任何答案。
我的目标是使用PHP编写CSV文件。这个文件必须有中文ANSI编码(我想它是简体中文的GB2312,在记事本++中我只看到ANSI作为编码)。必须导入到其他工具。
[重要提示]
我们目前正在使用notepad ++和具有中文默认语言的PC转换文件。这个过程是:
我运行了测试:将我的.csv文件更改为.php并用以下代码替换它以保持相同的编码:
<?php echo mb_detect_encoding("test"); ?>
这将打印:“ASCII”。
然后我不确定我的CSV的输出应该是什么:GB2312?,ASCII?,ANSI?。我甚至不清楚它们之间的区别。
我还读到,使用中文PC将Excel 2007保存为CSV的文件可以用于此工具。
[/重要提示]
目前,我无法做到正确! 当我打开文件时,我得到了notepad ++,它仍然显示编码为UTF-8编码。 而且很明显因为中文字符看起来不错,它们应该看起来“破碎”: - )。
我使用以下标题条件:
header("Content-type: text/csv; charset=GB2312");
header("Content-Disposition: attachment; filename=$filename.csv");
header("Content-Transfer-Encoding: binary");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
header("Expires: 0");
[其他信息]
我的文件编码方式是(我把它作为摘要以保持简单)
//header, hard coded in Chinese
$csv = "东西,东西,东西\n"; //example "stuff,stuff,stuff"
[...]
//write line by line, status is also hard coded (行)
$csv .= $DB_data_1.",".$DB_data_2.",行\n"; //行=OK
[/其他信息]
在打印之前我还用CSVv将我的CSV字符串转换为GB2312(也尝试了mb_convert_encoding)
setlocale(LC_ALL,'zh_CN');
$csv = iconv("UTF-8","GB2312",$csv);
echo($csv);
我的.php文件是用UTF-8编码编写的(不是没有BOM的UTF-8)
基本上,我总是把UTF-8文件作为输出,我需要ANSI。 看起来有如此多的参数/属性,我说得不对。 非常感谢您的帮助!
谢谢!
大卫
[其他信息]
例如,在我标题的列上将进行以下编码更改:
[/其他信息]
答案 0 :(得分:1)
string mb_convert_encoding(string $ str,string $ to_encoding [, 混合$ from_encoding])
注意第二个参数是编码。所以它应该是
$csv = mb_convert_encoding($csv, "GB2312", "UTF-8");
答案 1 :(得分:1)
您发送的HTTP标头仅向客户端指定您要回复的字符集 - 它不会为您转换内容。因此,如果您指定charset=GB2312
,但发送utf8,那么您只是在撒谎。在任何情况下,charset属性在这里都没有任何意义,因为内容无论如何都是以二进制形式传输的。
您需要做的是在发送内容之前转换内容。 Iconv或mbstring是适当的工具。首先确保你知道你的数据是什么字符集。据推测它是从某个地方(如数据库)加载的。因此,考虑到你有点失落,很有可能它不是你认为的那样。例如。它可能是iso-8859-1而不是utf-8。
一旦你确定它确实是utf-8,请使用你已经尝试过的iconv:
$csv = iconv('UTF-8', 'GB2312', $csv);
假设$csv
是一个包含csv文件的字符串。