使用JavaScript将文本截断为特定大小(8 KB)

前端之家收集整理的这篇文章主要介绍了使用JavaScript将文本截断为特定大小(8 KB)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 Zemanta API,每次调用最多可接受8 KB的文本.我正在使用JavaScript从网页中提取要发送给Zemanta的文本,所以我正在寻找一个能够以8 KB的速度截断我的文本的函数.

Zemanta应该自己进行这种截断(即,如果你发送一个更大的字符串),但是我需要在进行API调用之前将这个文本稍微移动一下,所以我想保持有效负载尽可能小.

假设8 KB的文本是8,192个字符,并相应截断是否安全? (每个字符1个字节;每KB 1,024个字符; 8 KB = 8,192个字节/字符)或者,在某些情况下,这是不准确还是仅为真?

是否有更优雅的方法根据其实际文件大小截断字符串?

解决方法

如果您使用单字节编码,是,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,那么你就是自己的.

原文链接:https://www.f2er.com/js/159086.html

猜你在找的JavaScript相关文章