【问题标题】:JSON.stringify() to UTF-8JSON.stringify() 转 UTF-8
【发布时间】:2014-12-02 15:34:54
【问题描述】:

据我所知,Javascript 基本上使用 UTF-16 作为字符串的标准。使用 JSON.stringify() 我可以从一个对象创建一个 JSON 字符串。

那个 JSON 字符串是 UTF-16 编码的吗?

我能否将该字符串转换(希望很快)为 UTF-8 以节省大文件的带宽(1MB JSON)?

【问题讨论】:

  • 字符串不在 UTF-8 或 UTF-16 中:只有它们的编码结果的二进制表示是。
  • 假设 utf-8 的空间效率更高,而 utf-16 在某些情况下不正确,\0800 以上的代码点更有效地存储在 utf-16 中

标签: javascript json utf-8 utf-16


【解决方案1】:

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

所以,是的,JSON.stringify() 将以您的实现对字符串使用的任何编码返回一个字符串。如果您要找到一种方法来更改该编码在您的脚本上下文中,它将不再是一个有效的 JavaScript 字符串。

不过,为了通过网络对其进行序列化,我希望它会自动转码为 HTTP 请求的字符集(假设您正在谈论 HTTP)。因此,如果您使用 UTF-8 字符集通过 HTTP POST 发送它,您的浏览器应该在发送之前透明地处理该数据的转码。

否则浏览器将在字符集处理方面遇到困难。

【讨论】:

  • +1 表示“透明处理”。您应该只需要在执行 IO 时指定编码,而不是自己篡改。
  • 如果你碰巧使用了一些处理Uint8Array(原始字节)的API,那么你可以从一个字符串解码一个UTF-8数组(或者换句话说,将一个字符串编码成一个UTF- 8 数组)使用new TextEncoder("utf-8").encode(JSON.stringify(object))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 2015-09-21
  • 1970-01-01
相关资源
最近更新 更多