如果我假设字符串是 4 个字节,一个字符是 1 个字节,那么下面的语句是否正确?
If I assume string is of 4 bytes and a character is of 1 byte, is it right to say following statement?
这可能是一个非常基本的问题,但我找不到正确的答案来解决我的问题。
根据 This post it says 1 byte can hold 1 character and according to this post 它说如果字符串是 4 个字节它可以存储 2^31 -1 个字符。
我很困惑,如果 1 个字符 = 1 个字节,那么 4 个字节的字符串应该只包含 4 个字符。 (我知道我错了,但谁能解释一下,我的数学有什么问题?)
为了便于讨论,我们假设 1 个字节是 8 位。大多数系统都遵循此规则(尽管肯定有 1 个字节不是 8 位的系统)。
According to This post it says 1 byte can hold 1 character
link 谈论的是 MYSQL 数据库中的字符串,尽管它所说的适用于一般支持 7 位 ASCII 字符的任何系统。对此,1字节=1个字符,是的。
另一方面,8 位字符会带来更多的复杂性。对于只需要 7 位的 ASCII 字符,1 个字节 = 1 个字符。但对于非 ASCII 字符,1 个字节可能表示也可能不表示完整的 Unicode 字符,具体取决于用于对字符串进行编码的字符集。
例如,€
(Unicode 代码点 U+20AC EURO SIGN
)在 Windows-125X 字符集中编码时占用 1 个字节(Windows-1251 中的0x88
, 0x80
in Windows-1252 through Windows-1258), 但以 UTF-8 (0xE2 0x82 0xAC
) 编码时需要 3 个字节,即使它们都是 8 位编码(相比之下,UTF-16 是一种 16 位编码,使用 2 个字节 0xAC 0x20
或 0x20 0xAC
对 U+20AC
进行编码,具体取决于使用的字节序)。
according to this post it says if string is of 4 bytes it can store 2^31 -1 characters
link 在 Java 中谈论字符串,尽管它所说的内容适用于任何支持使用 32 位带符号整数来表示字符串长度的可变长度字符串的系统。
link 并没有说明一个包含 2^31 -1 个字符的 4 字节字符串。它实际上说的是一个字符串可以容纳 最多 2^31 -1 个字符。那是 32 位有符号整数的最大值。
I am confused if 1 char = 1 byte then string of 4 byte should hold only 4 character.
对于 7 位 ASCII 字符串,或使用 4 个字节编码 4 个 Unicode 代码点的 8 位 ANSI/UTF-8 字符串,是的。
您必须考虑字符串的字节编码才能知道字符串的字节实际代表什么。
这可能是一个非常基本的问题,但我找不到正确的答案来解决我的问题。 根据 This post it says 1 byte can hold 1 character and according to this post 它说如果字符串是 4 个字节它可以存储 2^31 -1 个字符。 我很困惑,如果 1 个字符 = 1 个字节,那么 4 个字节的字符串应该只包含 4 个字符。 (我知道我错了,但谁能解释一下,我的数学有什么问题?)
为了便于讨论,我们假设 1 个字节是 8 位。大多数系统都遵循此规则(尽管肯定有 1 个字节不是 8 位的系统)。
According to This post it says 1 byte can hold 1 character
link 谈论的是 MYSQL 数据库中的字符串,尽管它所说的适用于一般支持 7 位 ASCII 字符的任何系统。对此,1字节=1个字符,是的。
另一方面,8 位字符会带来更多的复杂性。对于只需要 7 位的 ASCII 字符,1 个字节 = 1 个字符。但对于非 ASCII 字符,1 个字节可能表示也可能不表示完整的 Unicode 字符,具体取决于用于对字符串进行编码的字符集。
例如,€
(Unicode 代码点 U+20AC EURO SIGN
)在 Windows-125X 字符集中编码时占用 1 个字节(Windows-1251 中的0x88
, 0x80
in Windows-1252 through Windows-1258), 但以 UTF-8 (0xE2 0x82 0xAC
) 编码时需要 3 个字节,即使它们都是 8 位编码(相比之下,UTF-16 是一种 16 位编码,使用 2 个字节 0xAC 0x20
或 0x20 0xAC
对 U+20AC
进行编码,具体取决于使用的字节序)。
according to this post it says if string is of 4 bytes it can store 2^31 -1 characters
link 在 Java 中谈论字符串,尽管它所说的内容适用于任何支持使用 32 位带符号整数来表示字符串长度的可变长度字符串的系统。
link 并没有说明一个包含 2^31 -1 个字符的 4 字节字符串。它实际上说的是一个字符串可以容纳 最多 2^31 -1 个字符。那是 32 位有符号整数的最大值。
I am confused if 1 char = 1 byte then string of 4 byte should hold only 4 character.
对于 7 位 ASCII 字符串,或使用 4 个字节编码 4 个 Unicode 代码点的 8 位 ANSI/UTF-8 字符串,是的。
您必须考虑字符串的字节编码才能知道字符串的字节实际代表什么。