当前位置: 首页 > 面试题库 >

Java中字符串的字节数

鱼浩荡
2023-03-14
问题内容

在Java中,如果我有一个String x,如何计算该字符串中的字节数?


问题答案:

字符串是字符列表(即代码点)。表示字符串所用的字节数完全取决于你使用哪种编码将其转换为字节。

也就是说,你可以将字符串转换为字节数组,然后按如下所示查看其大小:

// The input string for this test
final String string = "Hello World";

// Check length, in characters
System.out.println(string.length()); // prints "11"

// Check encoded sizes
final byte[] utf8Bytes = string.getBytes("UTF-8");
System.out.println(utf8Bytes.length); // prints "11"

final byte[] utf16Bytes= string.getBytes("UTF-16");
System.out.println(utf16Bytes.length); // prints "24"

final byte[] utf32Bytes = string.getBytes("UTF-32");
System.out.println(utf32Bytes.length); // prints "44"

final byte[] isoBytes = string.getBytes("ISO-8859-1");
System.out.println(isoBytes.length); // prints "11"

final byte[] winBytes = string.getBytes("CP1252");
System.out.println(winBytes.length); // prints "11"

因此,你看到,即使是简单的“ ASCII”字符串,其表示形式也可以具有不同数量的字节,具体取决于所使用的编码。使用你感兴趣的字符集作为的参数getBytes()。并且不要陷入假设UTF-8将每个字符都表示为单个字节的陷阱,因为这也不是真的:

final String interesting = "\uF93D\uF936\uF949\uF942"; // Chinese ideograms

// Check length, in characters
System.out.println(interesting.length()); // prints "4"

// Check encoded sizes
final byte[] utf8Bytes = interesting.getBytes("UTF-8");
System.out.println(utf8Bytes.length); // prints "12"

final byte[] utf16Bytes= interesting.getBytes("UTF-16");
System.out.println(utf16Bytes.length); // prints "10"

final byte[] utf32Bytes = interesting.getBytes("UTF-32");
System.out.println(utf32Bytes.length); // prints "16"

final byte[] isoBytes = interesting.getBytes("ISO-8859-1");
System.out.println(isoBytes.length); // prints "4" (probably encoded "????")

final byte[] winBytes = interesting.getBytes("CP1252");
System.out.println(winBytes.length); // prints "4" (probably encoded "????")

(请注意,如果不提供字符集参数,则会使用平台的默认字符集。这在某些情况下可能很有用,但是通常应避免依赖默认值,并且在编码/时始终使用显式字符集需要解码。)



 类似资料:
  • 为什么数组不相等?我希望返回原始的字节数组。

  • 如何将字符串(字节字符串)转换为字节(字节字符串),而不必手动复制和粘贴字符串并在其前面放置b?

  • 谁能让我知道如何在Java将protobuf字节字符串转换成字符串吗? 在我的例子中,我获得的字节字符串值为“\376\024\367”。有没有办法从bytestring中得到与String相同的东西?我的意思是,当我使用system.out.println()在控制台中打印字符串值时,我应该得到\376\024\367。 多谢。

  • 问题内容: 我试图理解一个到字符串,一个的字符串表示形式到转换…我将我的转换成一个要发送的字符串,然后我希望我的Web服务(用python编写)将数据直接回显给客户端。 当我从Java应用程序发送数据时… 字节发送.. 发送(这是Arrays.toString()的结果,它应该是我的字节数据的字符串表示形式,该数据将通过电线发送): 在python端,python服务器将字符串返回给调用方(我可以

  • 用这种方式将字节缓冲符转换为字符串是否正确, 我问这个问题的原因是,这看起来太简单了,而像Java这样的其他方法:将字符串转换成字节缓冲符和相关问题看起来更复杂。

  • 问题内容: 我碰到了这段Java函数,将XML节点转换为Java String表示形式: 它看起来很简单,因为它希望输出字符串没有任何XML声明,并且必须包含缩进。 但是我想知道实际的输出应该如何,假设我有一个XML节点: 我可以假设应用上述转换后得到的String是: 我想自己测试一下,但是我不知道如何以该函数实际需要的方式表示这个XML节点。 我有些困惑,在此先感谢您的慷慨帮助。 问题答案: