写一个例子之间的区别是什么? php / html文档在 Ansi 和 UTF-8没有BOM ,然后在网络服务器上传?两个文档都有元UTF-8。
如果有人用记事本简单地写,他们必须选择Ansi,因为记事本不提供没有Byde-Order-Mark的UTF-8
答案 0 :(得分:3)
不同之处在于,如果您在一些8位代码页中编写文件,然后忘记将其转换为UTF-8,那么人们可能会看到您的网页被破坏,因为您将字符集设置为元数据中的UTF-8 ;并且要快速应用该错误修复,您无法使用SFTP或WinSCP访问该文件,因为您必须再次转换为8位代码页。
此外,UTF-8是Unicode,支持所有字符,而在“ANSI”代码页中则不支持。并非所有Unicode文档都可以转换回“ANSI”代码页,因此您无法以这种方式编辑它们。
没有理智的人使用Windows记事本进行严肃的编码,因为它缺乏功能,语法着色,行结尾格式以及对字符集的可怕支持。
答案 1 :(得分:3)
区别在于UTF-8和“ANSI”(微软用于各种8位编码的误称)是完全不同的编码,尽管它们与ASCII码范围0x00到0x7F重合。
将“ANSI”文件标记为UTF-8编码是不正确的。如果数据实际上只包含ASCII字符,或者在大多数情况下,如果文件是使用指定正确编码的HTTP标头发送的,则错误不会导致可观察到的影响。
没有理由不将BOM用于UTF-8编码的HTML文件。另外声称的页面基于几年前失去所有实际影响的浏览器的信息,或者基于PHP与PHP混淆的信息。在PHP文件中,BOM可能会导致问题,因为PHP软件无法正确处理BOM,即在将文件内容插入另一个文件时不会将其删除。
记事本确实无法将文件保存为没有BOM的UTF-8。因此,在创建或编辑PHP文件时,请使用其他程序,例如Notepad++。如果你必须使用记事本,你只需要适应这些限制:使用“ANSI”(在找到它在你的环境中的内容 - 它可能是windows-1252或其他东西之后),在HTTP头中声明它并{ {1}}标记,并使用character references表示无法用“ANSI”表示的字符。