PHP:将UTF-8字符串转换为Ansi?

时间:2013-02-18 10:17:51

标签: php ansi

我根据数据库中的值构建了一个csv字符串。最后一个字符串存储在我的$ csv变量中。

现在我提供此字符串供下载,如下所示:

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=whatever.csv");
header("Pragma: no-cache");
header("Expires: 0");

echo $csv;

例如,当我在Notepad ++中打开它时,它将 Ansi称为UTF-8 。我怎么能只把它给安西呢?

我试过了:

$csv = iconv("ISO-8859-1", "WINDOWS-1252", $csv);

这没有改变任何事情。

谢谢!

解决方案:     $ csv = iconv(“UTF-8”,“WINDOWS-1252”,$ csv);

3 个答案:

答案 0 :(得分:18)

尝试:

$csv = iconv("UTF-8", "Windows-1252", $csv);

但是你最终会丢失数据,因为ANSI只能编码一小部分UTF-8。如果您没有充分的理由反对它,请提供UTF-8编码的文件。

答案 1 :(得分:5)

由于对ISO-8859-1,Windows-1252&您问题中的ANSI 这里要注意的重要一点是:

  

所谓的Windows字符集(确切地说是WinLatin1或Windows代码页1252)将一些位置用于可打印字符。因此,Windows字符集与ISO 8859-1不同。 Windows字符集通常称为“ANSI字符集”,但这是严重错误的。它尚未获得ANSI批准。

     

历史背景:Microsoft基于ANSI标准草案的设计设计。一个glossary by Microsoft explicitly admits this

更多资源:herehere

对于其他人来说,仅仅是因为这个问题。

以下是MS对此的确切解释:

  

用于表示Windows代码页的术语“ANSI”是一个历史参考,但现在仍然是在Windows社区中持续存在的误称。其来源于以下事实:Windows代码页1252最初基于ANSI草案,后者成为国际标准化组织(ISO)标准8859-1。 “ANSI应用程序”通常是对非Unicode或基于代码页的应用程序的引用。

答案 2 :(得分:0)

为避免在转换特殊字符时丢失数据,

setlocale(LC_CTYPE, "fr_FR.UTF-8"); //set your own locale
$csv = iconv("UTF-8", "WINDOWS-1252//TRANSLIT//IGNORE", $csv);