La longueur de la chaîne en octets en JavaScript

Dans mon code JavaScript j'ai besoin de rédiger un message à un serveur dans ce format:

<size in bytes>CRLF
<data>CRLF

Exemple:

3
foo

Les données peuvent contenir des caractères unicode. J'ai besoin de les envoyer, comme UTF-8.

Je suis à la recherche pour la plupart de la croix-navigateur de façon à calculer la longueur de la chaîne en octets en JavaScript.

J'ai essayé de composer ma charge utile:

return unescape(encodeURIComponent(str)).length + "\n" + str + "\n"

Mais il ne me donne pas de résultats précis pour les anciens navigateurs (ou, peut-être les cordes dans ces navigateurs en UTF-16?).

Toute indices?

Mise à jour:

Exemple: longueur en octets de la chaîne ЭЭХ! Naïve? en UTF-8 est de 15 octets, mais certains navigateurs rapport de 23 octets au lieu.

  • Double Possible? stackoverflow.com/questions/2219526/...
  • aucune des réponses à la question que vous avez lié à travailler pour moi.
  • Quand vous parlez de "ЭЭХ! Naïf?" avez vous la mettez dans un particulier forme normale? unicode.org/reports/tr15
  • J'ai tapé au hasard éditeur de texte (en mode UTF-8) et l'a sauvé. Tout comme n'importe quel utilisateur de ma bibliothèque devrait le faire. Cependant, il semble que j'ai compris ce qui n'allait pas — voir ma réponse.