我前几天写了类似的代码(伪代码):
let numBytes = file.size()
let string = String::reserve(numChars=numBytes)
file.read(&string, encoding='auto')
但后来我想,是否有任何实际的编码,我保留的字符量是不够的?对于我熟悉的编码,它从
numChars <= numBytes
开始就一直有效,例如:
我可以很容易地想出一个虚构的编码,但事实并非如此,但是有像这样的真实编码吗?
理论上是的,但这主要取决于您对字符编码的定义。这样的编码需要用平均少于 8 位来表示每个字符。这确实将此类可能的编码限制为少于 64 个字符。
虽然更通常被认为是二进制到文本,但换个方式 Base64 可以被认为是一种字符编码,每个字符只需要 6 位,因此允许的字符多于字节。
我认为压缩二进制编码的十进制是一种字符编码。由于其目的是专门表示以 10 为基数的数字而不是原始二进制数,因此该数字很容易被视为字符(类似地,ASCII 也有数字字符)。每个 BCD 数字都是 4 位,因此我们将两个字符转换为一个字节。