10

JavaScriptでテキスト文字列(生のテキストまたは画像/オーディオなどのBase64エンコード文字列)のDISKサイズを見積もる必要があります。これを見積もる方法がわかりません。グーグルで見つけることができるのは.length、StackOverflowの誰かが知っているかもしれないと思ったからです...

私が知る必要がある理由は、ユーザーが5MB(またはIEでは10MB)のクォータに近づいていることを確認し、ドメインの最大サイズを増やすように促す機能を必要とする(または必要とする)localStorageスクリプトがあるためです。 。したがって、ユーザーがヒットした場合、たとえば、4.5MBのデータでプロンプトが表示されます

ブラウザのデータ上限が5MBに近づいています。最大データを次のように増やしてください...[ブラウザ用に増やす手順]

4

5 に答える 5

3

それはあなたの文字エンコーディングに依存するでしょう。ASCIIエンコーディングを使用する場合、str.lengthバイトになります。UTF-16を使用する場合、(str.length * 2)バイトになります。UTF-8を使用する場合は、文字列内の文字に依存します。(一部の文字は1バイトしか使用しませんが、他の文字は最大4バイトを使用する可能性があります。)Base64でエンコードされたデータを処理する場合、文字はすべてASCII範囲内にあるため、ディスク上でstr.lengthバイトを占有します。最初にデコードしてバイナリとして保存すると、(str.length * 3/4)バイトかかります。(Base64では、3つのコード化されていないバイトが4つのコード化されたバイトになります。)

ところで-JoelSpolskyの絶対最小すべてのソフトウェア開発者を絶対に読んでいない場合は、Unicodeと文字セットについて積極的に知っておく必要があります(言い訳はできません!)。すぐに読んでください。

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

更新:localStorageを使用している場合は、window.localStorage.lengthに精通していると思いますが、これは使用された量のみを示し、新しいデータが収まるかどうかは示しません。また、 Dive into HTML5、特にストレージに関するセクションを読むことを強くお勧めします。

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

書き込み以降に何かが変更されていない限り、localStorageではドメインあたり5MBに制限されており、ユーザーがそれを増やす方法がないため、何ができるかわかりません。

于 2010-11-29T22:29:29.767 に答える
2

正確にはなりませんが、文字列のバイト数を数えて大まかな見積もりを得ることができます。

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â'; alert(bytes(mystring));

于 2010-11-29T22:30:45.787 に答える
0

あなたがメモリ使用量について話しているなら、いいえ。これはECMAScript仕様の一部ではないため、使用されているメモリを(少なくとも実装に依存せずに)確実に決定する方法はありません。文字エンコードによって異なります。

于 2010-11-29T22:30:21.777 に答える
0

文字列内のデータとその保存方法によって異なります。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)
 }
于 2010-11-29T22:30:35.630 に答える
0

この簡単で正確な方法で、文字列のバイト数を数えることができます

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

console.log("size is ",imgFileSize);
于 2016-06-07T10:21:03.953 に答える