【问题标题】:encodings - different result between codePointCount and length编码 - codePointCount 和长度之间的不同结果
【发布时间】:2013-12-08 08:37:07
【问题描述】:

我发现了一个棘手的地方,找不到任何答案为什么会发生这种情况。

主要问题是字符串有多长。

是否包含一个或两个字符。

代码:

public class App {
    public static void main(String[] args) throws Exception {
        char ch0 = 55378;
        char ch1 = 56816;
        String str = new String(new char[]{ch0, ch1});
        System.out.println(str);
        System.out.println(str.length());
        System.out.println(str.codePointCount(0, 2));
        System.out.println(str.charAt(0));
        System.out.println(str.charAt(1));
    }
}

输出:

?
2
1
?
?

有什么建议吗?

【问题讨论】:

  • 我建议你花点时间去看看this article
  • 你期待什么输出?

标签: java encoding


【解决方案1】:

是否包含一个或两个字符。

它包含一个 Unicode 字符,它由 2 个 UTF-16 代码单元组成。 Java 中的每个 char 都是一个 UTF-16 代码单元……它可能不是一个完整的字符。每个字符都有一个代码点 - Unicode 提供了一个编码字符集,将每个字符映射到一个表示该字符(代码点)的整数。

length() 返回代码单元的数量,而codePointCount 返回代码点的数量。

您可能想看看我关于 encodings in .NET 的文章 - 术语都可以很好地翻译(因为它是标准术语),所以请忽略特定于 .NET 的部分。

【讨论】:

  • 这正是我想要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
  • 2020-09-09
  • 2012-05-15
相关资源
最近更新 更多