首页 > 解决方案 > PHP iconv 从 utf-8 到 windows-1252,没有特殊字符

问题描述

我正在尝试对这样的文件内容进行编码:

$f_file = fopen("dreams.txt", "w");  
$string = "Los sueños se cumplen.";    
$string_encoded = iconv( mb_detect_encoding( $string ), 'Windows-1252//TRANSLIT', $string );
fwrite($f_file, $string_encoded);
fclose($f_file);

如果$string包含特殊字符,例如“ñ”或“á”,则文件将保存为 Windows-1252 编码,但如果$string不包含它们,则文件将被编码为 UTF-8。我需要使用 Windows-1252 编码的文件。

我究竟做错了什么?

标签: phpiconvwindows-1252

解决方案


ASCII、ANSI (ISO-8859-1)、Windows-1252 和 UTF8 中使用的前 127 个字符都是相同的,因此仅通过查看仅包含其中字符的文档就无法判断“该”编码是什么设置:它们都同样适用。

现代编辑器会看到这一点并说“现在是 2018 年,所以我要告诉你它是 UTF8”,他们甚至不会错:在添加这些特殊字符之前,所有这些编码方案都是可以互换的。直到您引入更高的字节码字符,您才必须再次明确编码应该是什么。


推荐阅读