Java 如何将UTF-8文件中的字符位置转换为字节位置?

Java 如何将UTF-8文件中的字符位置转换为字节位置?,java,utf-8,byte,Java,Utf 8,Byte,我有UTF-8编码的文本文件。我能读得一清二楚。每个字符可以是一个字节或多字节。我如何知道读取一个字节的位置以及是否读取了多个字节?在读取字符时计算字节数 对于每个字符c: if(c<128) bytesCount++; else if (c<2048) bytesCount+=2; else bytesCount+=3; if(对于较大的字符数,仅使用2或3是不够的。UTF-8代码序列的长度可达6字节(并为单个抽象字符生成多个Javachar值),低编号字符可以用长字

我有UTF-8编码的文本文件。我能读得一清二楚。每个字符可以是一个字节或多字节。我如何知道读取一个字节的位置以及是否读取了多个字节?

在读取
字符时计算字节数

对于每个
字符c

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

if(对于较大的字符数,仅使用2或3是不够的。UTF-8代码序列的长度可达6字节(并为单个抽象字符生成多个Java
char
值),低编号字符可以用长字节序列而不是通常的短字节序列来表示。@Wyzard:除了UTF-8代码序列可以长达4字节之外,您的评论绝对正确。引用:2003年11月,RFC 3629限制UTF-8以
U+10FFFF
结尾,以符合UTF-16字符编码。这删除了所有5字节和6字节序列,以及大约一半的4字节序列。这是正确的,但不适用于高达65535的字符值,java只支持这一点[但可以自由实现高达6字节的编码(请参阅wikipedia链接)]