utf-8 / utf-16 转换

utf-8 / utf-16 conversion

当我在 Dreamweaver CS6 中设计一个 html 页面时,我使用了它的验证工具(它将代码发送到 w3c)并且没有出现任何错误。但是,当我在 UltraEdit 21(它使用 HTML Tidy)中验证同一页面时,我收到警告: "Specified input encoding (utf-8) does not match actual input encoding (utf-16)"

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

嗯,问题是:

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

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

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

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

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

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

The Title/Encoding Page Properties options let you specify the document encoding type that is specific to the language used to author your web pages as well as specify which Unicode Normalization Form to use with that encoding type.

  1. Select Modify > Page Properties, or click the Page Properties button in the text Property inspector.

  2. Choose the Title/Encoding category and set the options.

    ...

    Encoding Specifies the encoding used for characters in the document.

    If you select Unicode (UTF‑8) as the document encoding, entity encoding is not necessary because UTF‑8 can safely represent all characters. If you select another document encoding, entity encoding may be necessary to represent certain characters. For more information on character entities, see www.w3.org/TR/REC-html40/sgml/entities.html.

    ...

    Include Unicode Signature (BOM) Includes a Byte Order Mark (BOM) in the document. A BOM is 2 to 4 bytes at the beginning of a text file that identifies a file as Unicode, and if so, the byte order of the following bytes. Because UTF‑8 has no byte order, adding a UTF‑8 BOM is optional. For UTF‑16 and UTF‑32, it is required.

选择不带 BOM 的 UTF-8。

UltraEdit 在打开文件时自动检测编码并将其显示在状态栏底部。请参阅 UltraEdit Advanced - Configuration - File Handling - Unicode/UTF-8 Detection 并按按钮 Help 了解更多详情。

UTF-16 对于以 UTF-16 Little Endian 编码的文件,使用或不使用 BOM 自 UE v19.00 起使用标准状态栏显示。单击状态栏中的此列表框并选择 Unicode - UTF-8 会导致将文件从 UTF-16 LE 转换为 UTF-8,然后与 head of 中的字符集声明相匹配你的 HTML5 文件。

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

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

转换为 UTF-8 可以使用 UltraEdit 完成,也可以使用命令 UNICODE/UTF-8 转换为 UTF-8(Unicode 编辑) 在子菜单 Conversions 菜单 文件.

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

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

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

另一种使用 UltraEdit 转换文件的方法是使用菜单 File 中的命令 Save As 并使用适当的 Encoding / 格式 设置。 UTF-8Save As 对话框中表示将文件保存为带有 BOM 和 UTF-8 的 UTF-8 编码文件 - 否BOM 无 BOM 独立于标准 Save.

的两个配置设置

要使用 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 希腊文本文件就是这种情况。

HTML 与 UltraEdit v21.30.0.1024 一起安装的 Tidy 是 2009 年 3 月 25 日的版本。我不确定 HTML Tidy 是否真的支持 HTML5 的短字符集声明。但它看起来是这样,否则你不会看到关于使用 HTML Tidy.

验证 HTML5 文件的警告

阅读 UltraEdit power tip 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 可以将文档定义为 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 encoded files (1, 2, 3 or even 4 bytes per character) or files with single-byte coded characters using a code page like Windows-1252 / ISO 8859-1 (Latin 1) or Windows-1253 / ISO 8859-7 (Latin/Greek).