【问题标题】:utf-8 / utf-16 conversionutf-8 / utf-16 转换
【发布时间】:2015-03-27 10:49:37
【问题描述】:

当我在 Dreamweaver CS6 中设计一个 html 页面时,我使用了它的验证工具(它将代码发送到 w3c)并且我没有收到任何错误。但是,当我在 UltraEdit 21 中验证同一页面(它使用 HTML Tidy)时,我收到警告: “指定的输入编码(utf-8)与实际输入编码(utf-16)不匹配”

页面设置为 html5(<!doctype html>)、utf-8(<meta charset="utf-8">)并包含希腊文本。

好吧,问题是:

  1. 这个问题会影响页面的外观吗?我的意思是,当我发布它时,中国、德国或...火地岛的用户会看到希腊文本吗?

如果是,其余的就不那么重要了,但我会问他们:

  1. 是什么让 HTML Tidy 将文档定义为 utf-16?是否有任何类型的字符、单词或可见字符串可以删除/删除以纠正问题?

  2. 如果我使用<meta charset="utf-16">,浏览器是否会正确解析代码(以希腊文结尾,供全球用户使用)?

【问题讨论】:

  • 您可能在 <meta> 标记中指定了 UTF-8,但实际文件以 UTF-16 保存。这就是 UltraEdit 的警告。您需要将 DreamWeaver 配置为以 UTF-8 保存。提交给 W3C 的文件以 UTF-8 格式传输,这就是它不抱怨的原因。

标签: html encoding utf-8 dreamweaver utf-16


【解决方案1】:

实际文件编码将在文件的 Dreamweaver 属性中设置。

Dreamweaver Help / Set title and encoding properties for a page:

标题/编码页面属性选项可让您指定特定于用于创作网页的语言的文档编码类型,以及指定与该编码类型一起使用的 Unicode 规范化表单。

  1. 选择修改 > 页面属性,或单击文本属性检查器中的页面属性按钮。

  2. 选择标题/编码类别并设置选项。

    ...

    编码 指定用于文档中字符的编码。

    如果您选择 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。

【讨论】:

    【解决方案2】:

    UltraEdit 在打开文件时自动检测文件的编码,并将其显示在状态栏的底部。请参阅 UltraEdit 高级 - 配置 - 文件处理 - Unicode/UTF-8 检测 并按 帮助 按钮了解更多详细信息。

    UTF-16 在使用 UE v19.00 后的标准状态栏时显示以 UTF-16 Little Endian 编码的文件,无论是否带有 BOM。单击状态栏中的此列表框并选择 Unicode - UTF-8 会导致将文件从 UTF-16 LE 转换为 UTF-8,然后与 HTML5 文件头部的字符集声明匹配.

    在 UE v19.00 或更高版本中使用基本状态栏或使用 v19.00 之前的任何 UltraEdit 版本时,状态栏字段右侧的行、列和剪贴板编号以 U- 用于 UTF-16 LE 编码的文件。

    关于状态栏的 UltraEdit 帮助页面包含有关 UltraEdit 中标准和基本状态栏中显示的信息的更多信息。

    UltraEdit 也可以通过子菜单 转换 中的命令 UNICODE/UTF-8 到 UTF-8(Unicode 编辑) 转换为 UTF-8 >文件。

    高级 - 配置 - 文件处理 - 保存中有 2 个配置设置,它们定义了保存带或不带字节顺序标记 (BOM) 的 UTF-8 编码文件:

    1. 保存时将 UTF-8 BOM 标头写入所有 UTF-8 文件
    2. 在此程序中创建的新文件上写入 UTF-8 BOM(如果未设置上述内容)

    由于 UTF-8 编码的 HTML 文件应始终没有 BOM,因此在使用 UltraEdit 主要用于编辑 HTML 文件时,最好取消选中两个 UTF-8 BOM 设置。

    另一种使用 UltraEdit 转换文件的方法是使用菜单 File 中的命令 Save As 并使用适当的 Encoding / Format 设置。 另存为对话框中的 UTF-8 表示将文件另存为带有 BOM 的 UTF-8 编码文件,而 UTF-8 - NO 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 可能对您很有用,因为您似乎并不真正了解 encodingcharacter set 的真正含义以及原因对于 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 Tidy 将文档定义为 utf-16?

    您的 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(拉丁语/希腊语)。

    【讨论】:

      猜你喜欢
      • 2021-01-30
      • 2015-09-21
      • 2015-09-19
      • 2020-01-28
      • 2017-09-24
      • 1970-01-01
      • 2013-05-20
      • 2013-02-25
      相关资源
      最近更新 更多