本地化和字符编码

这篇翻译不完整。请帮忙从英语翻译这篇文章

浏览器内部是以Unicode来处理文本的。然而,在将文本通过网络传递到浏览器时,是采用了用字节(字符编码)表示字符的方法。HTML规范 推荐使用UTF-8编码(可以代表所有的Unicode),但网站也可以声明使用自己采用的编码。

<meta> 元素中的 charset属性被用来指明页面采用的编码。它必须<head>定义块中:

<meta charset="utf-8">

浏览器内部细节

当Web的内容中依据HTML规范要求声明了编码时,Firefox将转换该编码内容到内部编码格式(声明编码->Unicode)。不幸的是,以往Web内容中对这点执行的并不好,比如使用UTF-8且声明为UTF-8编码。在20世纪90年代,很多并未声明编码,或者使用不能代表所有Unicode的特定区域的编码来处理内容,这些情况当时都是很常见的。


对于不声明其编码,且不符合HTML规范内容的处理,Firefox需要一个备用编码。大多数时候,备用编码是windows-1252(通常称为ISO-8859-1),这一编码在上世纪90年代大量用于部署在美国和西欧的Windows应用程序,而且它是当时大量部署的UNIX应用程序(也主要在美国和西欧)编码的超集。不过即使这一时期同样在一些地区(非美国和西欧),其网络内容中也不是采用windows-1252编码的,在这些地区,对于不声明编码的内容备用编码需要一个非windows-1252(non-windows-1252)。


不幸的是,有太多区域对应不同的备用编码(non-windows-1252),这意味着Firefox不能很好的确定那么多遗留内容不同的备用编码。为了处理这些内容,Firefox把windows-1252作为备用编码,用于旧的跨区域内容部分,并促其采用正确的地区对应备用编码。在新创建内容时,需要声明编码,而备用编码不再参与内容的处理。


此外,在上世纪90年代有少数地区,没有明显的单一的特定区域编码,从而引入了多个遗留编码到Web内容中,这使得内容展示效果依赖于启发检测到的编码设定。为此Firefox仍然在这些区域中进行启发式检测(甚至可以指定编码)。

查找编码规范名称


下面的文字是指编码规范名称。规范名称是注册在unixcharset.properties(unixcharset表达式)中等号右边的值。

指定备用编码

从Firefox 28,这部分内容是过时的,因为 intl.charset.default不再存在。从地区映射备用编码现在已经集成到Gecko内部。

备用编码指定在 intl.properties 下的intl.charset.default 中。它用于指定本地化传统内容将采用的编码。它应该设定为当地遇到未定义编码传统内容最可能采用的编码。注意 这里指定的备用编码不一定能够准确表示内容所需的当地语言所有本地化字符!

在西欧、北美洲、中美洲、南美洲、非洲、中亚和大洋洲等等地区,备用编码通常设置为windows-1252,但在其他地区,如中欧、东欧、中东、东亚等等地区通常需要设置为其他编码。

为了避免Web作者创造新的UTF-8的内容时没有声明内容使用UTF-8,且为了最大限度地提高用户跨区域阅读内容的能力,不设置备用编码就采用UTF-8。注意,Firefox不再发送接受字符的HTTP头( Accept-Charset ),所以不需要考虑在中设置<接受字符编码时设定备用编码。

对于地区后备编码目前指定为ISO-8859-1的,应该改为windows-1252。虽然ISO-8859-1编码和windows-1252编码相同。但火狐正在推动windows-1252作为这些内容在 Encoding Standard (编码规范)中的首选标准。

对于Internet Explorer拥有比Firefox更大的市场份额的区域,备用编码通常应设置为与Internet Explorer相同的值。通过加载测试页面,您可以看到特定浏览器的备用编码。(在测试时一定要使用默认设置!)

对于Firefox比Internet Explorer拥有更多市场份额的地区,最好不要更改回退编码,即使它不遵循上面给出的指导。(例如,波兰、匈牙利和捷克的地区的备用编码应该继续采用ISO-8859-2,尽管这与IE是不同的备用编码。)

有疑问时,使用windows-1252作为备用的编码。

指定启发式检测模式

启发式检测模式是由intl.properties中偏好intl.charset.detector指定。除了俄语、乌克兰语和日语以外,所有区域的设置必须留空。在任何情况下都不要指定 "universal" (“万能”)探测器。尽管它的名字并不普遍!

少数民族语言例外

如果用户本身可采用少数民族语言和文字,但他通常使用区域通用语言,这时适当的指定备用编码和启发式检测模式需要与所处广大的区域的语言定位相同。例如,对于俄罗斯的少数民族语言本地化,复制来自俄罗斯本地化的设置是合适的。

设置一些更容易从菜单选择的字符编码

intl.properties中的 intl.charsetmenu.browser.static 可以标记一些编码,它们出现在浏览器编码选择菜单中。该值是一个逗号分隔的规范编码名称列表。清单应至少包括备用编码,windows-1252和UTF-8编码。对于可能有多个遗留编码的地区,这些编码都应被包括。例如,在日本设置 Shift_JIS为备用编码,但也有其他的传统编码: ISO-2022-JP和EUC-JP。因此, intl.charsetmenu.browser.static应该设置为" Shift_JIS, EUC-JP, ISO-2022-JP, windows-1252, UTF-8"。

文档标签和贡献者

此页面的贡献者: xdsnet
最后编辑者: xdsnet,