我实际上有一个非常简单的问题,即在Java中进行编码时,字母“ A”在UTF-16编码中应该占据的最小大小(字节数)是多少(这应该无关紧要)。

我真的以为这很简单:由于UTF-16是2或4个字节,而字母A很好是一个“简单”的字母,答案应该是2,但是然后:

System.out.println("A".getBytes(StandardCharsets.UTF_8).length); // prints 1, as expected
System.out.println("A".getBytes(StandardCharsets.UTF_16).length); // prints 4, I thought it would be 2

System.out.println("AB".getBytes(StandardCharsets.UTF_8).length);// prints 2 as expected
System.out.println("AB".getBytes(StandardCharsets.UTF_16).length); // prints 6, expected 4

有人可以在这里带点光吗?

#1楼 票数:2 已采纳

使用UTF-16时,需要定义它是小端还是大端。 它使用BOM或\\￾两个额外字节。

UTF-8一次只有一个字节,因此没有字节顺序可以跟踪。

如果您使用UTF-16BE或UTF-16LE,它会定义订单,因此不需要BOM

  ask by Eugene translate from so

未解决问题?本站智能推荐:

2回复

检查字节序列是否包含utf-16

我正在从流中读取一个字节序列。 假设为了参数,序列是固定长度的,我将整个事物读入一个字节数组(在我的例子中,它是vector<char>但对于这个问题并不重要)。 这个字节序列包含一个字符串,我可以使用utf-16或utf-8编码。 不幸的是,没有指出它是哪一个。 我可以
1回复

UTF-16 编码 - 为什么使用复杂的代理对?

我一直在研究字符串编码方案,在研究 UTF-16 的工作原理时,我有一个问题。 为什么使用复杂的代理对来表示 21 位代码点? 为什么不简单地将位存储在第一个代码单元中,而将其余位存储在第二个代码单元中? 我是不是错过了什么! 像我们在 UTF-8 中那样直接存储位有问题吗? 我在想什么的例子:
5回复

UTF-8 和 UTF-16 的区别?

UTF-8 和 UTF-16 的区别? 为什么我们需要这些?
7回复

有什么理由比 UTF-8 更喜欢 UTF-16?

检查 UTF-16 和 UTF-8 的属性,我找不到任何更喜欢 UTF-16 的理由。 但是,检查 Java 和 C#,它看起来像那里的字符串和字符默认为 UTF-16。 我在想这可能是出于历史原因,也可能是出于性能原因,但找不到任何信息。 有谁知道为什么这些语言选择 UTF-16? 我是否也有
2回复

为什么 Java 字符使用 UTF-16?

最近我阅读了很多关于 Unicode 代码点以及它们如何随着时间的推移而演变的内容,并且确定我也阅读了http://www.joelonsoftware.com/articles/Unicode.html 。 但我找不到真正的原因是为什么 Java 使用 UTF-16 作为字符。 例如,如果我有
3回复

在UnicodeString中存储UTF-8字符串

在Delphi 2007中,您可以在WideString中存储UTF-8字符串,然后将其传递给Win32函数,例如 Delphi 2007不会干扰UTF8Str的内容,即它保留为存储在WideString中的UTF-8编码字符串。 但是在Delphi 2010中,我很难找到一种方法
2回复

unicode识别是utf-8 utf-16还是其他?

我正在使用postgre数据库,它在marathi单词pimpri的unicode中已编码UTF-8像这样\\ u092A \\ u093F \\ u0902 \\ u092A \\ u0930 \\ u0940 \\ u0935 \\ u093E \\ u0918 \\ u0947 \\ u0
1回复

在 Java 中将字符串转换为 UTF-16 表示

我正在尝试将 Java 字符串转换为各种编码类型并将其打印出来。 例如, luke将6C 75 6B 65在UTF-8和UTF-16而中国字符猪会将E7 8C AA在UTF-8和732A在UTF-16 。 我如何编写一个函数来做到这一点? 似乎不适用于UTF-16 。