特殊字符未按预期显示

新手上路,请多包涵

我有以下简单的 HTML 页面:

 <!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <div>
        méywe
    </div>
</body>
</html>

在 Chrome 或 Firefox 中显示时(我没有测试其他浏览器),我看到以下内容:

m�ywe

我错过了什么? html文件以UTF-8编码保存。服务器是阿帕奇。我的机器是 Windows 7 专业版。文本编辑器是 UltraEdit。

谢谢!

更新

最初,我使用 UltraEdit 编辑此 html 文件,但遇到了问题。根据 cmbuckley 的输入和 Notepad++ 的安装(来自 Heatmanofurioso 的建议),我考虑了我的文件可能以某种方式损坏的可能性(即使它在 UltraEdit 和记事本中看起来都不错)。所以我用 utf-8 编码用记事本保存了我的文件。仍然看到问题(可能是由于缓存???)。然后我又用UltraEdit保存了一遍。在浏览器中查看页面,问题消失。

学过的知识

有两个文本编辑器,如果那是你的工具,如果你看到无法解释的问题,试试不同的。没有工具是完美的,即使您每天都使用一个。在我的例子中,Notepad++ 修复了我的文件的 utf8 问题,UltraEdit 不知何故失败了。

感谢大佬们的帮助!!!

原文由 curious1 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 259
2 个回答

1 - 更换你的

<meta charset="utf-8">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

2 - 检查您的 HTML 编辑器的编码是否为 UTF8。通常这个选项可以在程序顶部的选项卡上找到,就像在 Notepad++ 中一样。

3 - 如果您以某种方式导入字体,请检查您的浏览器是否与您的字体兼容。或者尝试添加一个 css 来将你的字体设置为默认/普遍接受的字体,比如

body
{
    font-family: "Times New Roman", Times, serif;
}

希望能帮助到你 :)

原文由 Heatmanofurioso 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 Windows-1252 编码(最有可能)而不是 UTF-8 编码保存文件导致在浏览器中显示错误的非 ASCII 字符的原因是缺少有关 UltraEdit 的 UTF-8 检测知识以及可能还有适当的 UTF -8 配置。

当前最新版本 22.10 的 UltraEdit 如何检测 UTF-8 编码在用户对用户论坛主题 UTF-8 not recognized, largish file 中有详细说明。该论坛主题还包含有关如何为所有 HTML 文件主要使用 UTF-8 编码的 HTML 编写者最好地配置 UltraEdit 的建议。 UTF-8 检测在 UltraEdit v24.00 中得到了极大的改进,当滚动到包含 UTF-8 编码字符的块时,它也可以在非常大的文件中检测 UTF-8 编码字符。

不幸的是,当前最新的 UltraEdit v22.10 和以前的版本使用的正则表达式搜索来检测 UTF-8 HTML 字符集声明不适用于短 HTML5 变体,如论坛主题 Short UTF-8 charset declaration in HTML5 header 中所述。原因是 charset=utf-8 之间的双引号字符。我通过电子邮件向 IDM Computer Solutions, Inc. 报告了这一点,因为参考主题是根据建议创建的,建议对正则表达式进行小的更改以检测短的 HTML5 UTF-8 声明。 UTF-8 检测后来由适用于 UE v24.00 和 UES v17.00 的 UltraEdit 开发人员更新,作为参考论坛主题上的帖子详细解释。

然而,当一个 HTML5 文件声明为 UTF-8 编码,但 UltraEdit 将其加载为 ANSI 文件时,用户可以在主窗口底部的状态栏中看到加载错误。一个小的(小于 64 KB)UTF-8 编码的 HTML 文件应该得到

  • U8- 和行终止符类型 (DOS/UNIX/MAC) 为 UE < v19.00 的用户或在更高版本的 UE 中使用基本状态栏时显示
  • UTF-8 在状态栏的编码选择器中为 UE v19.00 或更高版本不使用基本状态栏的用户选择。

如果不是这种情况,UltraEdit 用户可以使用

  • 从菜单 文件 另存为 并选择 UTF-8 - NO BOM _编码_(Windows Vista 或更高版本)分别为 _格式_(Windows 2000/XP)将文件从 ANSI 转换为 UTF-8,不带字节顺序标记,或者
  • 从菜单 文件 中的子菜单 转换ASCII 到 UTF-8(Unicode 编辑) ,将文件从 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 (十六进制)将显示为 méywe -5编码文件以 ASCII/ANSI 模式(文件 - 打开对话框中的选项)使用 Windows-1252 作为代码页打开,UltraEdit 在下次打开时自动将此文件检测为 UTF-8 编码文件,尽管 <meta charset="utf-8"> 未被识别因为现在文件的前 64 KB 中至少有一个 UTF-8 编码字符。

回答问题:

我错过了什么?

在将文件打开或创建为 ANSI 文件(或更精确的使用代码页的每个字符编码文本文件的单个字节)并将其声明为 UTF-8 编码后,您错过了将文件另存为 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'?>

and other variations depending on usage of ' or " and writing either UTF-8 or utf-8 (and other spellings) without really knowing what this string 表示应用程序解释文件的字节。

最好的默认新文件格式是什么? 包含许多有用的信息和指向网页的链接,这些网页包含有关文本编码的有用信息,哪些文件类型使用哪种编码以及如何相应地配置 UltraEdit。

原文由 Mofi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题