html中字符编码的确定算法(一)
来源:互联网 发布:域名注册案例 编辑:程序博客网 时间:2024/06/05 05:42
html中字符编码的确定算法(一)
tomorrow.cyz@gmail.com
在某些情况下,在解析文档之前明确确定它的编码方式是不切实际的。因此,规范提供了一个两步机制(two-pass mechanism),以及一个可选的pre-scan。允许可以在开始解析文档之前对所有可用的字节采用一个简化的解析算法。然后,真正的解析开始,使用这个预解析和带外的meta数据派生出来的编码(encoding)。如果在文档加载的时候用户代理发现了一个同现有信息(就是之前预解析和带外的meta数据派生出来的编码)冲突的编码声明,解析器就以真正的编码重新执行一次解析。
用户代理采用编码测探算法(encoding sniffing algorithm)来确定在第一步解码文档的时候使用的字符编码。这个算法以用户代理可用的带外meta数据(比如Content-Type metadata)以及当前所有可用的字节为输入,返回一个编码(encoding)和一个confidence。Confidence可以是tentative,或者certain,或者irrelevant。使用的encoding,以及在那个编码中的confidence是tentative的还是certain的,在解析的时候用来确定是否需要更改编码。如果没有编码是必要的,比如parser正在解析unicode字符流(stream of Unicode characters)且根本没有必要编码,则confidence是irrelevant。下面是确定encoding的算法。
1.用户指定至上: 如果用户以一个特定的encoding明确指定用户代理覆盖文档的character encoding,可以返回那个encoding以及certain的confidence,终止执行这些步骤。
2. 传输层指定:如果传输层指定了encoding(比如http的content-type头部指定了encoding),并且这个encoding是支持的,返回该encoding以及certain的confidence,终止这些步骤。
3.等待:在这个算法中,用户代理在当前这一步或者后面的步骤中都可以等待资源更多的字节到来。通常来说,预解析(preparsing)源来获取encoding能够提高性能,因为它减少了扔掉在解析以查找encoding信息的时候使用的数据结构的需要。但是,如果用户代理延迟了太久以获得数据来确定encoding,则延迟的代价超过了预解析带来的性能提升。
4.BOMS查找:字节流同BOM表中的第一列匹配,则返回改行第二列的encoding,以及certain的confidence。
Bytes in Hexadecimal
Encoding
FE FF
Big-endian UTF-16
FF FE
Little-endian UTF-16
EF BB BF
UTF-8
5.文档中查找:文档中查找encoding的算法将在后面进行描述,我这里称之为文档查找编码算法,它是一个两步算法。
6.如果用户代理具有这个页面的的可能encoding的信息(比如基于上次访问是页面的encoding),返回该encoding,以及tentative的confidence,终止这些步骤。
7.自动检测:用户代理可以通过对数据流的一些分析算法尝试自动检测character encoding。这些算法可能使用资源的有关信息资源以外的资源的内容,包括资源地址。如果自动检测成功确定了character encoding,则返回该encoding,以及tentative的confidence,终止这些步骤。 A composite approach to language/encoding detection( http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html)一文中描述了一种encoding的检测方法。UTF-8 encoding有一个高检测能力的位模式。包含大于0x7F这样符合UTF-8模式的字节的文档很有可能是UTF-8,而不满足这一点的则很有可能不是UTF-8。用户代理查找最通用的encoding是被鼓励的。
8.否则,返回一个实现默认或者用户指定的缺省的character encoding,以及tentative的confidence。
在受控环境或者文档的encoding可以被规定的环境下(比如,对于那些新的网络下专用的用户代理),建议采用通用的UTF-8 encoding。 在其它环境下,缺省的encoding通常由语言环境决定(该语言下,页面经常采用的encoding)。下表给出的基于语言环境的一个缺省encoding值。
Locale language
Suggested default encoding
ar
UTF-8
be
ISO-8859-5
bg
windows-1251
cs
ISO-8859-2
cy
UTF-8
fa
UTF-8
he
windows-1255
hr
UTF-8
hu
ISO-8859-2
ja
Windows-31J
kk
UTF-8
ko
windows-949
ku
windows-1254
lt
windows-1257
lv
ISO-8859-13
mk
UTF-8
or
UTF-8
pl
ISO-8859-2
ro
UTF-8
ru
windows-1251
sk
windows-1250
sl
ISO-8859-2
sr
UTF-8
th
windows-874
tr
windows-1254
uk
windows-1251
vi
UTF-8
zh-CN
GB18030
zh-TW
Big5
All other locales
windows-1252
blog.csdn.net/dlmu2001
- html中字符编码的确定算法(一)
- html中字符编码的确定算法(二)
- 编码解码模型中编码方案的确定策略
- svm中gamma的确定
- 调查研究中样本量的确定
- 聚类分析中分类数的确定问题
- WINCE注册表中IClass值的确定
- mapreduce中map个数的确定
- mapreduce中map个数的确定
- 自定义UITableViewCell 中UIButton 的确定事件
- Android中View大小的确定过程
- MapReduce中map任务个数的确定
- Android中View大小的确定过程
- WINCE注册表中IClass值的确定
- 数据标准化中数据域的确定
- 数据库中候选键的确定
- 自定义view中文字位置的确定
- 页面中元素大小的确定
- Visual Studio快捷键
- 生命
- c宏定义的技巧总结(转)
- 直接利用工具将prn文件打印到打印机的方法
- centos yum
- html中字符编码的确定算法(一)
- c# 隐藏控制台窗口
- android引用外部工程或jar包
- [转载] 最幽默的解释 卷积的物理意义
- 托盘编程全接触
- 『yizia』SD2见闻--运营商沙龙,对话中移动
- 模式设计学习(1)
- QT For Linux 安装小记
- 读取oracle blob字段内容并以文件形式下载