2016-07-11 5 views
0

2年後に私は同じことについて議論している人を見ています。私はまだ何が起こっているのか理解していない。コンピューティング/ JavaScriptの文字列からバイトへの文字列を理解できません

このSOポスト次

String length in bytes in JavaScript

私はジャバスクリプトのこの部分を理解したいです!私はブロックチェーンにプッシュする前にビットクロックトランザクションのkbサイズを計算することにも興味があります。しかし、2人のうちのより重要なことは、私は最終的には、これらのユーザーが何回もやって来るために何をしているのかを理解することです。

回答として概説されている3つの関数を試しましたが、string.lengthを返す以外は何もしませんが、別の値(文字列のオーバーヘッドはバイト/キロバイト/メガバイト)

function byteCount(s) { 
    return encodeURI(s).split(/%..|./).length - 1; 
    } 

console.log(byteCount('hello'),'hello'.length);//5,5 


function getLengthInBytes(str) { 
    var b = str.match(/[^\x00-\xff]/g); 
    return (str.length + (!b ? 0: b.length)); 
    } 

console.log(getLengthInBytes('hello'),'hello'.length);//5,5 


console.log((new TextEncoder('utf-8').encode('hello')).length,'hello'.length);//5,5 

これは私にとって意味をなさない!明らかに、これらの人々は、string.length で簡単に入手できるものを手に入れる方法について話しているわけではありません。

代わりに文字列をバイナリにする必要がありますか? (のように:How to convert text to binary code in JavaScript?

+1

2バイト以上のスペースを取る特殊な文字がいくつかあります。 "Äpfel"を試してみてください。 UTFに関するウィキペディアの記事では、この動作の仕組みについて説明しています。 –

+0

Jup私は答えとして書いています –

+0

JavaScriptは、Unicode 1.1になった標準であり、16ビット(2バイト)のエンコーディングしか許されない標準であるUCS-2を使用します。最近のUnicodeのバージョンでは、実際に文字あたり* 7バイトを使用できます。 https://mathiasbynens.be/notes/javascript-unicode –

答えて

1

世界で異なる符号がたくさんあります。 1バイトのデータには適合しません。いくつかの文字が1バイト以上のデータを使用するのはなぜか。 いくつかの例: "Äüöôś"

+0

注:JavaScriptは内部的に1バイトあたり2バイトを使用します。それはUTF - 16を使用することができます... –

+0

ニース知っている。ありがとう –

1

あなたは基本的なascii文字でテストしています(もちろん、それらはutf8ですが、asciiのようなもので、これらの文字は両方のエンコードで非常によく動作します)。拡張文字で試してください。

console.log((new TextEncoder('utf-8').encode('')).length, ''.length);

関連する問題