当我在Dreamweaver CS6中设计一个html页面时,我使用它的验证工具(它将代码发送到w3c),我没有得到任何错误。但是,当我在UltraEdit 21中验证同一页面时(它使用HTML Tidy),我收到警告: "指定的输入编码(utf-8)与实际输入编码(utf-16)不匹配"
该页面设置为html5(带<!doctype html>
),为utf-8(带<meta charset="utf-8">
)并包含希腊文字。
嗯,问题是:
如果是,其余部分则不那么重要,但我会问他们:
是什么让HTML Tidy将文档定义为utf-16?是否有可以删除/删除的字符,单词或可见字符串来纠正问题?
如果我使用<meta charset="utf-16">
,浏览器会正确解析代码(以全局用户的希腊文字结尾)吗?
答案 0 :(得分:3)
将在文件的Dreamweaver属性中设置实际文件编码。
Dreamweaver Help / Set title and encoding properties for a page:
“标题/编码页面属性”选项允许您指定特定于用于创作网页的语言的文档编码类型,以及指定与该编码类型一起使用的Unicode规范化表单。
选择修改&gt;页面属性,或单击文本属性检查器中的页面属性按钮。
- 醇>
选择标题/编码类别并设置选项。
...
<强>编码 指定用于文档中字符的编码。
如果选择Unicode(UTF-8)作为文档编码,则不需要实体编码,因为UTF-8可以安全地表示所有字符。如果选择其他文档编码,则可能需要实体编码来表示某些字符。有关角色实体的更多信息,请访问www.w3.org/TR/REC-html40/sgml/entities.html。
...
包含Unicode签名(BOM) 在文档中包含字节订单标记(BOM)。 BOM在文本文件的开头是2到4个字节,用于将文件标识为Unicode,如果是,则是以下字节的字节顺序。由于UTF-8没有字节顺序,因此添加UTF-8 BOM是可选的。对于UTF-16和UTF-32,它是必需的。
选择没有BOM的UTF-8。
答案 1 :(得分:0)
UltraEdit会在打开时自动检测文件的编码,并在状态栏的底部显示。请参阅UltraEdit 高级 - 配置 - 文件处理 - Unicode / UTF-8检测,然后按帮助按钮获取更多详细信息。
对于以UTF-16 Little Endian编码的文件,显示UTF-16 ,使用标准状态栏(自UE v19.00起)。单击状态栏中的此列表框并选择 Unicode - UTF-8 会导致将文件从UTF-16 LE转换为UTF-8,然后与HTML5文件头部中的字符集声明匹配
在UE v19.00或更高版本中使用基本状态栏或使用v19.00之前的任何UltraEdit版本时,带有行,列和剪贴板编号的字段右侧的状态栏字段以 U- <开头/ strong>用于UTF-16 LE编码的文件。
关于状态栏的UltraEdit帮助页面包含有关UltraEdit中标准和基本状态栏中显示的信息的更多信息。
使用UltraEdit也可以使用命令 UNICODE / UTF-8到UTF-8(Unicode编辑)在菜单子菜单转换中转换为UTF-8 >文件
高级 - 配置 - 文件处理 - 保存有2个配置设置,用于定义保存带或不带字节顺序标记(BOM)的UTF-8编码文件:
由于UTF-8编码的HTML文件应始终没有BOM,因此在使用UltraEdit主要用于编辑HTML文件时,最好不要同时检查两个UTF-8 BOM设置。
使用UltraEdit转换文件的另一种可能性是使用菜单文件中的命令另存为,并使用适当的编码/格式设置。 另存为对话框中的 UTF-8 表示将文件保存为带有BOM的UTF-8编码文件, UTF-8 - 无BOM ,无需独立于BOM标准保存的两个配置设置。
要使用UltraEdit将单个文件夹中的所有文件,UltraEdit中打开的文件夹树等转换为UTF-8,有一个UltraEdit脚本解决方案,请参阅How to convert all files in a folder to UTF-8?
不幸的是,UE v21.30.0.1024仍然无法识别HTML5标准中定义的短字符集声明<meta charset="utf-8">
。请参阅Short utf-8 charset declaration in HTML5 header,详细了解此限制及其解决方法。如果在前64 KB内至少找到一个UTF-8编码字符,则此限制无关紧要,因为带有希腊文字的HTML5文件就是这种情况。
随UltraEdit v21.30.0.1024安装的HTML Tidy是2009年3月25日的版本。我不确定HTML Tidy是否真的支持HTML5的短字符集声明。但它看起来是如此,否则您将看不到使用HTML Tidy验证HTML5文件的警告。
您可能需要阅读UltraEdit功能提示Unicode text and Unicode files in UltraEdit/UEStudio,因为您似乎并不知道编码和字符集的真正含义为什么HTML5中的声明与真正使用的编码匹配对应用程序很重要。
我现在在所有一般的UltraEdit之后回答你的问题。
虽然该文件包含文件内容使用UTF-8编码但使用UTF-16 Little Endian实际编码的声明,但浏览器显示内容正确。 UTF-16检测非常简单,特别是在BOM存在的情况下,因此浏览器会忽略错误的声明,并从一开始就将HTML文件的字节解释为UTF-16编码的文本文件。
然而,将UTF-16编码的HTML文件转换为没有BOM的UTF-8会好得多。没有BOM的UTF-8最常用于全球的HTML文件,然后HTML文件头部的字符集声明也会与真正使用的编码匹配。
HTML文件真正使用的编码是UTF-16 Little Endian和UltraEdit,HTML Tidy,浏览器在读取文本文件的前2个字节后检测到 - 字节顺序标记。这就是为什么HTML Tidy建议将HTML文件头部的编码声明为utf-16
,因为该文件实际上已经编码了。
<meta charset="utf-16">
,浏览器会正确解析代码吗?如果保持文件以UTF-16 LE编码(每个字符总是2个字节),最好用<meta charset="utf-16">
声明字符集。但是没有Unicode识别文本编辑器或浏览器有问题可以自动检测带字节顺序标记的UTF-16 Little Endian编码。
字符集声明对于UTF-8编码文件(每个字符1,2,3或甚至4个字节)或使用Windows-1252等代码页的单字节编码字符的文件非常重要/ ISO 8859-1(拉丁语1)或Windows-1253 / ISO 8859-7(拉丁语/希腊语)。