UTF-8逐位(2001)

2020-07-29 07:30:56

Richard Suchenwirth 2001-02-28-在TCL聊天室愉快的调试聊天中,我被邀请写下我对UTF-8分析的看法(参见。Unicode和UTF-8,另请参阅UTF-8历史记录)。

我把UTF-8字符串想象成一条铁路。它操作单单元火车车厢(单字节ASCII字符,从最高位为0的事实得知)和列车(一起构成字符的两个或更多字节的序列)。每列火车正好由一个火车头(你看,我是欧洲人)和一辆或多辆拖车组成。机车以形成1&1连续行和1个0位的最高位指示列车的长度(包括其本身)。例如:

0xxxxxxx:我是一节火车车厢,只有一个单元110xxxxx:我正在带领一列2长的火车。

拖车以起始的比特序列10表示它们是拖车。这样,它们就不会被误认为是火车车厢或火车头。例如:

列车的货运是以x和y为单位的。在这种具体情况下,一个C程序报告收到了字节C3和A4。写成二进制,那就是。

每个字节的指示符的一般规则是从最高(最左边)向下的那些位,直到并包括第一个零位";。

现在走的是另一条路。在标准UTF-8中,NUL字节(\x00)由NUL字节表示。很清楚。但在Tcl中,我们有时希望在二进制字符串(例如图像数据)中包含NUL字节,而不像真正的NUL字节那样将其终止。要表示没有任何物理NUL字节的NUL字节,我们将其视为ASCII以上的字符,其长度必须至少为两个字节:

Andrewsh 2010-03-12-请注意,0xc0 0x80序列在";Real";UTF-8:[L1],[L2]中是非法的