2
我有UTF-8编码的文本文件。我可以通过字符读取它。每个字符可以是一个字节或多个字节。我怎么知道一个字节重新存放的地方,并且它重新存储了多于一个字节?如何将字符位置转换为UTF-8文件中的字节位置?
我有UTF-8编码的文本文件。我可以通过字符读取它。每个字符可以是一个字节或多个字节。我怎么知道一个字节重新存放的地方,并且它重新存储了多于一个字节?如何将字符位置转换为UTF-8文件中的字节位置?
在读取char
s时计算字节数。
对于每个char c
:
if(c<128)
bytesCount++;
else if (c<2048)
bytesCount+=2;
else
bytesCount+=3;
参见encodeing定义wikipedia URF8
更大字符数目增加2或3是不够的。 UTF-8代码序列可以长达6个字节(并且为单个抽象字符产生多个Java char值),低编号字符*可以用长字节序列而不是通常的短字符序列表示。 – Wyzard 2013-02-08 23:40:07
@Wyzard:除了UTF-8代码序列长达4个字节这个事实之外,你的评论是绝对正确的。引用[Wikipedia](http://en.wikipedia.org/wiki/UTF-8):_ 2003年11月,UTF-8被RFC 3629限制为以'U + 10FFFF'结尾,以便匹配UTF-16字符编码。这删除了所有5字节和6字节的序列,以及大约一半的4字节序列。[ – jlordo 2013-02-08 23:43:40
]这是正确的,但是对于高达65535的字符值不适用,只有java支持这一点[但可以随意实现最多6字节编码(见维基百科链接)] – MrSmith42 2013-02-08 23:43:49