文件保存时使用 Windows-1252 编码(很可能)而不是 UTF-8 编码,导致在浏览器中非 ASCII 字符显示错误的原因是缺乏对 UltraEdit UTF-8 检测的了解,也许还有适当的 UTF-8 配置。
目前最新版本 22.10 的 UltraEdit 如何检测 UTF-8 编码,在用户论坛主题 UTF-8 not recognized, largish file 中有详细说明。该论坛主题还包含有关如何为 HTML 编写者最佳配置 UltraEdit,他们主要使用 UTF-8 编码的所有 HTML 文件的建议。UltraEdit v24.00 大大改进了 UTF-8 检测功能,可以在滚动到包含 UTF-8 编码字符的块时,也能检测到非常大的文件中的 UTF-8 编码字符。
很不幸,目前最新的UltraEdit v22.10和之前的版本使用的正则表达式搜索无法检测到短HTML5变体中的UTF-8 HTML字符集声明,如论坛主题
Short UTF-8 charset declaration in HTML5 header所述。原因是在
charset=
和
utf-8
之间有双引号字符。我通过电子邮件向IDM Computer Solutions, Inc.报告了这个问题,并建议在正则表达式中进行小改动以检测短HTML5 UTF-8声明。后来UltraEdit开发人员更新了UTF-8检测功能,适用于UE v24.00和UES v17.00,详细信息请参见引用论坛主题的帖子。
然而,当HTML5文件被声明为UTF-8编码,但UltraEdit将其作为ANSI文件加载时,用户可以在主窗口底部的状态栏中看到错误的加载。一个小于64 KB的UTF-8编码的HTML文件应该会得到正确的加载。
- 对于使用UE < v19.00或在后续版本中使用基本状态栏的用户,将显示
U8-
和行结束符类型(DOS / UNIX / MAC)
- 对于使用UE v19.00或更高版本但未使用基本状态栏的用户,可以在状态栏中选择
UTF-8
编码。
如果不是这种情况,UltraEdit用户可以使用
- 从文件菜单中选择另存为,选择编码(Windows Vista或更高版本)或格式(Windows 2000/XP)并选择
UTF-8 - NO BOM
,将文件从ANSI转换为UTF-8无字节顺序标记,或
- 在文件菜单的子菜单转换中选择ASCII to UTF-8(Unicode editing),将文件从ASCII/ANSI转换为UTF-8而不立即保存,或
- 通过状态栏中的编码选择器选择Unicode - UTF-8(仅适用于UE v19.00或更高版本),这也会立即将文件从ASCII/ANSI转换为UTF-8并启用Unicode编辑。
对于后两个选项,高级 - 设置或配置 - 文件处理 - 保存中的UTF-8 BOM设置决定下一次保存时是否带有字节顺序标记。
一旦使用UTF-8编码将单词méywe保存到文件中,结果是字节流6D C3 A9 79 77 65(十六进制),当在ASCII/ANSI模式下(文件 - 打开对话框中的选项)使用Windows-1252作为代码页打开UTF-8编码文件时,它将显示为méywe。尽管未识别,但UltraEdit会自动检测下次打开此文件时为UTF-8编码文件,因为文件的前64KB中现在至少有一个UTF-8编码字符。
回答问题:
你忘了在将文件声明为UTF-8编码后将其保存为UTF-8编码文件,而是以ANSI文件(或更精确地说是使用代码页的每个字符编码的单字节编码文本文件)打开或创建文件,并将其声明为UTF-8编码。这是许多用户写入HTML文件时的常见问题。
<meta charset="utf-8">
或者
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
或者
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
或者将其转换为XML文件
<?xml version="1.0" encoding="UTF-8"?>
或者
<?xml version="1.0" encoding='utf-8'?>
根据使用
'
或
"
以及编写
UTF-8
或
utf-8
(和其他拼写方式)而有所不同的变体,而不真正知道这个字符串对于解释文件字节的应用程序意味着什么。
什么是最佳默认新文件格式? 包含大量有用的信息和链接到有关文本编码的网页,介绍了哪种文件类型应该使用哪种编码以及如何相应地配置UltraEdit。
hexdump -C file.html
命令会显示什么?méywe
的字节应该是6d c3 a9 79 77 65
,其中c3 a9
代表é
。 - cmbuckley