143 votes

Combien d'octets dans une chaîne JavaScript ?

J'ai une chaîne javascript qui est d'environ 500K lorsqu'elle est envoyée depuis le serveur en UTF-8. Comment puis-je connaître sa taille en JavaScript ?

Je sais que JavaScript utilise UCS-2, ce qui signifie 2 octets par caractère. Cependant, cela dépend-il de l'implémentation de JavaScript ? Ou sur l'encodage de la page ou peut-être sur le type de contenu ?

104voto

P Roitto Points 808

Vous pouvez utiliser le BLOB pour obtenir la taille de la chaîne en octets.

Exemples :

console.info(
  new Blob(['']).size,                             // 4
  new Blob(['']).size,                             // 4
  new Blob(['']).size,                           // 8
  new Blob(['']).size,                           // 8
  new Blob(['I\'m a string']).size,                  // 12

  // from Premasagar correction of Lauri's answer for
  // strings containing lone characters in the surrogate pair range:
  // https://stackoverflow.com/a/39488643/6225838
  new Blob([String.fromCharCode(55555)]).size,       // 3
  new Blob([String.fromCharCode(55555, 57000)]).size // 4 (not 6)
);

73voto

Offirmo Points 3374

Si vous utilisez node.js, il existe une solution plus simple utilisant des tampons :

function getBinarySize(string) {
    return Buffer.byteLength(string, 'utf8');
}

Il y a une lib de npm pour cela : https://www.npmjs.org/package/utf8-binary-cutter (de la vôtre fidèlement)

22voto

Kinjeiro Points 318

Essayez cette combinaison en utilisant la fonction unscape js :

const byteAmount = unescape(encodeURIComponent(yourString)).length

Exemple de processus d'encodage complet :

const s  = "1 a ф № @ ®"; // length is 11
const s2 = encodeURIComponent(s); // length is 41
const s3 = unescape(s2); // length is 15 [1-1,a-1,ф-2,№-3,@-1,®-2]
const s4 = escape(s3); // length is 39
const s5 = decodeURIComponent(s4); // length is 11

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X