我们的源代码在每个 CSS 文件的顶部都包含版权...
/* 版权所有 © ... */
每次 Firefox 样式编辑器加载 CSS 文件时,都会在版权符号之前插入一个特殊字符...
/* 版权所有 © ... */
每次加载文件时都会添加一个额外的特殊字符。 我不认为这仅限于 Firefox,但这就是我目前用于 CSS 动态样式的方法。 每次都必须删除这个字符,并且偶尔它会提交并推送,这很烦人。
问题:如何防止特殊字符插入?
我的建议是在 Notepad++ 中打开文件并检查检测到的编码,如 Encoding 菜单下所示。我希望它会读到:
以 UTF-8 编码
如果是这样,请应用转换为 UTF-8-BOM。它将在您的文本文件中添加 3 个magic 字节,使 UTF-8 编码变得明确。保存文件并查看是否有效。
解释
出现此情况的原因是某些工具未正确检测编码并假设它是 ANSI(又名 Windows-1252)或 ISO 8859-1。对于普通的英文文本和代码文件来说,这些一字节编码和 UTF-8 非常相似。标准 ASCII 集的编码方式完全相同。只有特殊字符(例如您的情况下的版权符号)的编码方式不同,使用四个字节中的两个、三个,而不是一个。
现在,版权符号在 UTF-8 编码中有字节
0xC2 0xA9
或
11000010 10101001
,在 ANSI 编码中有字节 0xA9
。
带扬抑符的拉丁大写字母 A 在 ANSI 编码中具有字节
0xC2
或 11000010
。
当遇到
11000010 10101001
并将其解释为 UTF-8 时,第一个字节 110
的前三位与第二个字节 10
的前两位相结合,指示 两字节 UTF-8 字符。所以这是版权符号的正确UTF-8编码。
但是,如果遇到
11000010 10101001
并将其解释为 ANSI,则会看到两个单独的字符 Â 和 ©。
我认为©的UTF-8编码的第二个字节与一字节的ANSI编码相同并非巧合。看起来,Latin-1 补充以与 ANSI 中完全相同的顺序插入到 UTF-8 中,并具有相同的偏移量,使第二个字节相等。例如。 UTF-8 编码
μ将显示为
µ如果错误地解释为 ANSI。
也许,这样做是为了在出现编码错误时保留有关原始字符的一些信息。
©
<meta charSet="UTF-8"/>
如果我们明确定义CSS文件的编码,我们可以解决这个问题。 将 CSS 文件的第一行设置为以下内容以指定 UTF-8 编码:
@charset "utf-8";