如何导航UTF-8文本文件

时间:2013-06-17 16:26:54

标签: c parsing utf-8

我有一个UTF-8的文本文件,我需要在C中导航。我需要将此文件拆分为单独的较小文件(即将其切成两半)。发生这种情况时,有时会将多字节字符拆分为两个不同的文件。当一个愚蠢的文本编辑器去读取包含文本后半部分的文件时,它会读取剪切字符的后半部分并变得混乱,从而无法正确显示其余文本。如果我逐字节读取,我怎么能判断我是在一个字符的开头还是在中间?非ascii兼容的UTF-8字符都以前导位设置为1开始,但有些是两个字节,有些是三个字节。

编辑:没关系,我发现第一个字节包含字符长的前导1的数量。 IE三字节字符是1110xxxx xxxxxxxx xxxxxxxx。

3 个答案:

答案 0 :(得分:2)

if ((*s & 0xc0) == 0x80) /* You are in the middle of */;

答案 1 :(得分:1)

UTF-8字符表示使用1到4个字节。

检查一个字节,如果你有这种二进制模式:

10xxxxxx

你正处于一个多字节的中间。你应该继续担任下一个主角。

如果你有这个:

0xxxxxxx

你有一个1字节的字符。

 110xxxxx

是2字节字符的前导字节

 1110xxxx

是3字节字符的前导字节

 11110xxx

是4字节字符的前导字节

答案 2 :(得分:0)

所有UTF-8字符都由前导字节和零个或多个连续字节组成。所有连续字节都是二进制形式的“10xxxxxx”。所以所有前导字节都是两种形式之一:“0xxxxxxx”或“11xxxxxx”。