java - Java中字符串的字节数

标签 java string

在 Java 中,如果我有一个字符串 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 "????")

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

关于java - Java中字符串的字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4385623/

相关文章:

java - 如何在java中实现杰卡德系数?

java - 从另一个 java 服务启动 Java GUI 应用程序

java - EJB,持久化期间出现异常 : "EntityManager must be access within a transaction"

java - 为什么不调用改造 validator ?

python - 使用 for 循环遍历列表,检查字符是否存在。如果存在,将角色放入同一个位置的新列表中

java - 如何在给定文本中找到给定单词的所有排列?

用于删除除双引号之间的所有空格的 Javascript 正则表达式

r - 匹配 R 中不完全匹配的字符串

java - Spring 多路径变量

java - Kafka Streams Global Store - 添加更改日志主题