如果我把它放在我的起始字符串上:
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 ++中打开这个文件时,它似乎是以UTF-8编码而没有BOM。
我甚至尝试应用iconv
以及mb_convert_encoding
,就好像字符串是在utf-8中一样(尽管mb_detect_encoding
告诉我字符串是ASCII):< / p>
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 ... */
但显然,结果相同。字符串似乎是ISO-8859如果我做了var_dump
(重音是混乱的)但是在下载之后,似乎仍然以UTF-8编码(重音又回来了!)
我在这里缺少什么?我究竟做错了什么?我应该先写文件然后强制下载吗?
已解决:
问题是开始的字符集。它似乎在ISO-8859-1中。尽管@deceze对于您无法在纯文本文件中指定编码这一事实绝对正确,但您实际上能够编码其内容,我的意思是字符。
答案 0 :(得分:2)
您无法以任何一致性或准确度衡量检测编码。 ASCII文件在ISO-8859或UTF-8或任何其他ASCII兼容编码中同样有效。 PHP默认调用它为ASCII,Notepad ++默认调用它为UTF-8。这两项决定同样有效。由于&#34;实际&#34;编码不会存储在文件中的任何位置或文件的元数据中(即使您设置了HTTP标头),也没有&#34;对&#34;答案。