【问题标题】:How to convert from character positions to byte postions in UTF-8 file?如何将字符位置转换为 UTF-8 文件中的字节位置?
【发布时间】:2013-02-08 23:22:12
【问题描述】:

我有 UTF-8 编码的文本文件。我可以按字符阅读。每个 char 可以是一个字节或多字节。我怎样才能知道在哪里读取了一个字节以及读取了多个字节?

【问题讨论】:

    标签: java utf-8 byte


    【解决方案1】:

    在读取chars 时计算字节数。

    对于每个char c

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

    另见编码定义wikipedia URF8

    【讨论】:

    • 为更大的字符数添加 2 或 3 是不够的。 UTF-8 代码序列最长可达 6 个字节(并为单个抽象字符生成多个 Java char 值),低编号字符可以用长字节序列而不是通常的短的。
    • @Wyzard:您的评论绝对正确,除了 UTF-8 代码序列最长可达 4 个字节。引用Wikipedia2003 年 11 月,UTF-8 被 RFC 3629 限制为以 U+10FFFF 结尾,以匹配 UTF-16 字符编码的约束。这删除了所有 5 字节和 6 字节序列,以及大约一半的 4 字节序列。
    • 这是对的,但不适用于高达 65535 的字符值,java 仅支持此值 [但可以随意实现最多 6 字节的编码(参见 wikipedia-link)]
    猜你喜欢
    • 2015-09-01
    • 2013-08-20
    • 2010-11-03
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多