2013-02-08 90 views

回答

0

在读取char s时计算字节数。

对于每个char c

if(c<128) 
    bytesCount++; 
else if (c<2048) 
    bytesCount+=2; 
else 
    bytesCount+=3; 

参见encodeing定义wikipedia URF8

+0

更大字符数目增加2或3是不够的。 UTF-8代码序列可以长达6个字节(并且为单个抽象字符产生多个Java char值),低编号字符*可以用长字节序列而不是通常的短字符序列表示。 – Wyzard 2013-02-08 23:40:07

+0

@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

+0

]这是正确的,但是对于高达65535的字符值不适用,只有java支持这一点[但可以随意实现最多6字节编码(见维基百科链接)] – MrSmith42 2013-02-08 23:43:49