如果您使用的是单字节编码,是的,8192 个字符=8192 个字节。如果您使用 UTF-16,则 8192 个字符 (*)=4096 个字节。
(实际上是 8192 个代码点,这在代理方面略有不同,但我们不必担心,因为 JavaScript 不会。)
如果您使用的是 UTF-8,可以使用一个快速技巧在 JS 中以最少的代码实现 UTF-8 编码器/解码器:
function toBytesUTF8(chars) {
return unescape(encodeURIComponent(chars));
}
function fromBytesUTF8(bytes) {
return decodeURIComponent(escape(bytes));
}
现在你可以截断:
function truncateByBytesUTF8(chars, n) {
var bytes= toBytesUTF8(chars).substring(0, n);
while (true) {
try {
return fromBytesUTF8(bytes);
} catch(e) {};
bytes= bytes.substring(0, bytes.length-1);
}
}
(try-catch 的原因是,如果你截断多字节字符序列中间的字节,你会得到一个无效的 UTF-8 流并且 decodeURIComponent 会抱怨。)
如果它是另一种多字节编码,例如 Shift-JIS 或 Big5,那么您只能靠自己了。