JSON 编码与 Unicode:处理国际字符

jsonunicodeencodingi18n

JSON 和 Unicode 协同工作以支持全球所有语言。但编码问题仍然会导致 bug。以下是您需要了解的内容。

JSON 与 UTF-8

JSON 规范要求使用 UTF-8 编码。所有 JSON 字符串都是 Unicode 字符串:

{

"greeting": "Hello",

"chinese": "你好",

"japanese": "こんにちは",

"arabic": "مرحبا",

"emoji": "👋🌍"

}

Unicode 转义序列

JSON 支持任何字符的 \u 转义序列:

{

"chinese": "\u4f60\u597d",

"emoji": "\ud83d\udc4b",

"copyright": "\u00a9"

}

常见编码问题

乱码

当 UTF-8 JSON 被当作 Latin-1 解码时:

预期: 你好

实际: ä½ å¥½

修复: 始终在 HTTP 头中设置 Content-Type: application/json; charset=utf-8

BOM 问题

文件开头的字节顺序标记可能破坏 JSON.parse()

// 解析前移除 BOM

const clean = jsonStr.replace(/^/, '');

const data = JSON.parse(clean);

代理对

Emoji 和罕见字符在 JSON 中使用代理对:

{

"emoji": "\uD83D\uDE00"

}

JavaScript 通过 JSON.parse() 自动处理。

最佳实践

  • 始终使用 UTF-8 — 无例外
  • 在头信息中设置字符集application/json; charset=utf-8
  • 不要不必要的转义 — 现代解析器直接处理 Unicode
  • 使用真实数据测试 — 在测试用例中包含中文、阿拉伯语、emoji
  • 使用验证器 — 尽早检查编码问题
  • 使用我们的 JSON 验证器 检查 JSON 文件中的编码问题。

    相关工具