18

当我尝试验证我的网站时,我收到以下错误:

文本运行不在 Unicode 规范化表格 C 中

答:什么意思?

B:我可以用notepad++修复它吗?如何解决?

C:如果 B 不是,我如何使用免费工具(不是 Dreamweaver)来解决这个问题?

4

2 回答 2

20

这是什么意思?

来自W3C

在 Unicode 中,可以生成具有不同字符序列的相同文本。例如,以匈牙利语 világ 为例。第四个字母可以作为 预先组合的U+00E1 LATIN SMALL LETTER A WITH ACUTE(单个字符)或作为 U+0061 LATIN SMALL LETTER A 后跟 U+0301 COMBINING ACUTE ACCENT(两个字符)的分解序列存储在内存中.

维拉格 = 维拉格

Unicode 标准允许其中任何一种选择,但要求将两者视为相同。为了提高效率,应用程序通常会在执行搜索或比较之前对文本进行规范化。在这种情况下,规范化意味着将文本转换为使用所有预先组合或所有分解的字符。

Unicode 标准规定了四种规范化形式 :NFC、NFD、NFKC 和 NFKD。C 代表(预)组合,D 代表分解。K 代表兼容性。为了提高互操作性,W3C 建议在 Web 上使用NFC规范化文本。

除了“提高互操作性”之外,预组合文本通常看起来比分解文本更好。

如何使用免费工具解决此问题

通过text = unicodedata.normalize('NFC', text)在您最喜欢的编程语言中使用与 Python 等效的函数。

(或者,如果您不打算编写程序,您的问题应该转给超级用户或网站管理员。)

于 2011-03-29T00:31:04.330 回答
12

A. 它的意思是它所说的(见 dan04 的解释以获得简短的答案和 Unicode 标准的长答案),但它只是表明验证器的作者想要发出警告。HTML5 规则不需要规范化表格 C (NFC);它是 W3C 普遍偏爱的东西。

B.没有必要修复任何东西,除非您认为使用 NFC 实际上会更好。如果你这样做了,那么有各种工具可以自动转换为 NFC,例如免费的BabelPad编辑器。如果只需要处理非 NFC 中的一个字符,可以使用Fileformat.info 字符搜索等字符信息库找出字符的规范分解并使用它。

是否使用 NFC 取决于许多考虑因素和所涉及的字符。通常,NFC 效果更好,但在某些情况下,替代的非 NFC 呈现会产生更合适的渲染或在某些特定处理中效果更好。

例如,在重复问题中,引用Ω已被报告为触发消息。(验证器实际上也检查输入的字符作为此类引用,而不仅仅是纯文本级别的 NFC 检查。)引用代表 U+2126 OHM SIGN “Ω”,它被定义为规范等效于 U+03A9 GREEK CAPITAL字母欧米茄“Ω”。Unicode 标准明确指出后者是首选字符。它也更好地被字体覆盖。但如果您有特殊原因使用 OHM SIGN,您可以这样做,而不会违反当前的 HTML5 规则,并且您可以忽略验证器警告。

于 2013-04-14T18:34:23.917 回答