PHP:转换UTF-8字符串为ANSI?(PHP: Converting UTF-8 string

2019-08-17 00:40发布

我建立从值我在我的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);

Answer 1:

尝试:

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

但你最终会导致数据丢失,因为ANSI只能编码UTF-8的一小部分。 如果你没有反对一个非常强有力的理由,为你的文件UTF-8编码。



Answer 2:

因为有一个关于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或代码基于页面的应用程序的引用。



Answer 3:

为了避免数据丢失转换的特殊字符时:

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


文章来源: PHP: Converting UTF-8 string to Ansi?
标签: php ansi