我需要尝试估计 磁盘 JavaScript中的文本字符串的大小(可以是原始文本或base64编码字符串)。我不确定如何估计这一点。谷歌搜索时唯一可以找到的是 .length 所以我认为也许有人在Stackoverflow上可能知道...

我需要知道的原因是我有一个localstorage脚本需要(或希望拥有)检查用户何时接近他的5MB(或IE中的10MB)配额,并提示他们增加域的最大尺寸。因此,如果用户击中,请说,将提示的数据提示为4.5mbs

您正在接近浏览器5MB数据上限。请通过...增加最大数据 有关增加浏览器的说明

有帮助吗?

解决方案

这不是准确地说,但是您可以计算字符串中的字节数以获得粗略的估计。

function bytes(string) {
    var escaped_string = encodeURI(string);
    if (escaped_string.indexOf("%") != -1) {
        var count = escaped_string.split("%").length - 1;
        count = count == 0 ? 1 : count;
        count = count + (escaped_string.length - (count * 3));
    }
    else {
        count = escaped_string.length;
    }

return count;

}

var mystring ='tâ';警报(字节(mystring));

其他提示

这将取决于您的角色编码。如果使用ASCII编码,则将是str.length字节。如果使用UTF-16,则将是(str.length * 2)字节。如果使用UTF-8,则将取决于字符串中的字符。 (有些字符只会占1个字节,但其他字符最多可以占4个字节。)如果您要处理基本64编码的数据,则字符都在ASCII范围内,因此将占据磁盘上的str.length字节。如果首先解码它们并将其保存为二进制,则需要(str.length * 3/4)字节。 (使用基本64,3个未编码字节成为4个编码字节。)

顺便说一句 - 如果您还没有阅读Joel Spolsky的 绝对最小的每个软件开发人员绝对,积极地必须了解Unicode和角色集(没有借口!), ,您应该立即这样做。

http://www.joelonsoftware.com/articles/unicode.html

更新:如果您使用localstorage,我假设您熟悉window.localstorage.length,尽管这仅告诉您使用了多少,而不是您的新数据是否适合。我也强烈建议您阅读 潜入HTML5, ,尤其是存储部分:

http://diveintohtml5.ep.io/storage.html

除非自写作以来发生了变化,否则我不确定您可以做什么,因为LocalStorage将您限制为每个域5MB,而用户无法将其增加。

如果您在谈论内存使用情况,那就不。无法可靠地确定使用的内存(至少与实现无关),因为这不是Ecmascript规范的一部分。这取决于您的角色编码。

它取决于字符串中的数据及其存储方式。如果您的base64编码字符串被存储为base64编码字符串,则长度与磁盘上的大小相同。如果没有,您必须对其进行解码

我找到了一个解决方案(尽管看起来有些奇怪) 这里

 function checkLength() {
    var countMe = document.getElementById("someText").value
    var escapedStr = encodeURI(countMe)
    if (escapedStr.indexOf("%") != -1) {
        var count = escapedStr.split("%").length - 1
        if (count == 0) count++  //perverse case; can't happen with real UTF-8
        var tmp = escapedStr.length - (count * 3)
        count = count + tmp
    } else {
        count = escapedStr.length
    }
    alert(escapedStr + ": size is " + count)
 }

您可以通过这种简单而精确的方式来计算字符串中的字节数

var head = 'data:image/png;base64,';
var imgFileSize = Math.round((string.length - head.length)*3/4) ;

console.log("size is ",imgFileSize);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top