【发布时间】:2014-08-20 09:28:45
【问题描述】:
如果我将它投射到我的起始字符串上:
echo mb_detect_encoding($string);
我得到了价值:
ASCII
这个字符串将被下载。我想它是 UTF-8,因为这是 PHP 以及数据库的默认编码。它的文件扩展名为.DAT,我已经通过这种方式将它添加到config/mimes.php:
'DAT' => 'text/plain; charset=ISO-8859-1'
然后,如果我尝试使用 Codeigniter 的下载助手下载该字符串(假设我已经加载了助手)
force_download('MYFILE.DAT', $string);
通过F12调试,响应头如下:
Content-Disposition:attachment; filename="MYFILE.DAT"
Content-Length:21024
Content-Transfer-Encoding:binary
Content-Type:"text/plain; charset=ISO-8859-1"
但是当我在 Notepad++ 中打开这个文件时,它似乎是用没有 BOM 的 UTF-8 编码的。
我什至尝试过应用iconv 和mb_convert_encoding,就好像字符串是utf-8 一样,(即使mb_detect_encoding 告诉我字符串是ASCII):
iconv("UTF-8", "ISO-8859-1", $string);
iconv("UTF-8", "CP1252", $string);
/* ... and so on ... */
也试过了
mb_convert_encoding($string, "ISO-8859-1");
mb_convert_encoding($string, "CP1252");
/* ... and so on ... */
但显然,有相同的结果。如果我执行var_dump,字符串似乎是 ISO-8859(口音搞砸了),但下载后,似乎仍以 UTF-8 编码(口音又回来了!)
我在这里缺少什么?我究竟做错了什么?我应该先写文件然后强制下载吗?
已解决:
问题在于起始字符集。它似乎在 ISO-8859-1 中。尽管@deceze 关于您无法在纯文本文件中指定编码这一事实绝对正确,但您实际上可以对其内容(我的意思是字符)进行编码。
【问题讨论】:
-
(7bit) ASCII是utf8的子集,所以每个ascii文件也是utf8
标签: php codeigniter encoding utf-8 ascii