如何使用JavaScript估算字符串的磁盘大小?
-
29-09-2019 - |
题
我需要尝试估计 磁盘 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);