我建立从值我在我的DB一个csv字符串。 最终字符串存储在我的$ CSV变量。
现在,我提供这个字符串的下载,就像这样:
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=whatever.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo $csv;
当我在记事本++打开此为例,它的Ansi说为UTF-8。 我怎样才能chnage是只安思?
我试过了:
$csv = iconv("ISO-8859-1", "WINDOWS-1252", $csv);
这并没有改变任何东西。
谢谢!
解决方案:$ CSV =的iconv( “UTF-8”, “WINDOWS-1252”,$ CSV);
尝试:
$csv = iconv("UTF-8", "Windows-1252", $csv);
但你最终会导致数据丢失,因为ANSI只能编码UTF-8的一小部分。 如果你没有反对一个非常强有力的理由,为你的文件UTF-8编码。
因为有一个关于ISO-8859-1时,Windows 1252和ANSI在你的问题的误解,这里要注意的重要的事情是:
所谓的Windows字符集(WinLatin1,或Windows代码页1252,是精确的)使用其中的一些位置的可打印字符的。 因此,Windows字符集不符合ISO 8859-1相同。 Windows字符集通常被称为“ANSI字符集”,但是这是严重的误导。 它没有被批准ANSI。
历史背景:微软基于集合的设计上的ANSI标准草案。 一个由微软术语明确地承认这个 。
一些更多的资源: 这里和这里 。
所以只是FYI的是,在这个问题最终会其他人。
下面是MS对这一确切的解释:
如用来表示Windows代码页术语“ANSI”是一个历史的参照,但时下继续在Windows社区坚持名不副实。 这样做的源来自一个事实,即Windows代码页1252原本是基于一个ANSI草案,这成为国际标准化组织(ISO)标准8859-1。 “ANSI应用”通常是对非Unicode或代码基于页面的应用程序的引用。
为了避免数据丢失转换的特殊字符时:
setlocale(LC_CTYPE, "fr_FR.UTF-8"); //set your own locale
$csv = iconv("UTF-8", "WINDOWS-1252//TRANSLIT//IGNORE", $csv);