12

Javascript uses as far as I know UTF-16 fundamentally as a standard for strings. With JSON.stringify() I can create a JSON string from an object.

Is that JSON string UTF-16 encoded?

Can I convert (hopefully fast) that string to UTF-8 to save bandwidth for huge files (1MB JSON)?

nobody
  • 19,814
  • 17
  • 56
  • 77
Sebastian Barth
  • 4,079
  • 7
  • 40
  • 59
  • 3
    Strings aren't in UTF-8 or UTF-16 : only their binary representation resulting of an encoding is. – Denys Séguret Dec 02 '14 at 15:40
  • The assumption that utf-8 is more space efficient that utf-16 is not correct in some cases, code points above \0800 are more efficiently stored in utf-16 – Alex K. Dec 02 '14 at 15:49

1 Answers1

7

JavaScript engines are allowed to use either UCS-2 or UTF-16.

So, yes, JSON.stringify() will return a string in whatever encoding your implementation uses for strings. If you were to find a way to change that encoding within the context of your script, it would no longer be a valid JavaScript string.

For serialising it over a network, though, I would expect it to automatically be transcoded into the character set of the HTTP request (assuming you're talking about HTTP). So if you send it via HTTP POST with a character set of UTF-8, your browser should transparently handle the transcoding of that data before it is sent.

Otherwise browsers would really struggle with character set handling.

Lightness Races in Orbit
  • 378,754
  • 76
  • 643
  • 1,055
  • 1
    +1 for "does transparently handle". You should only ever need to specifiy an encoding when doing IO, and not tamper with it on your own. – Bergi Feb 25 '15 at 23:12
  • 7
    If you happen to be using some API which deals with `Uint8Array` (raw bytes), then you can decode a UTF-8 array from a string (or in otherwords encode a string into a UTF-8 array) using `new TextEncoder("utf-8").encode(JSON.stringify(object))` – David Callanan Feb 20 '20 at 22:00