飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • JSON

    • JSON 是什么
    • JSON 的六种数据类型
    • 对象(Object)
    • 数组(Array)
    • 字符串(String)
    • 数字(Number)
    • 布尔值和 Null
    • 字符编码与转义
    • JSON 语法规则
    • 综合应用示例
  • JSONPath

    • JSONPath 是什么
    • 根标识符和基本路径
    • 名称选择器
    • 索引选择器
    • 通配符选择器
    • 数组切片选择器
    • 过滤器选择器(上)
    • 过滤器选择器(下)
    • 后代段
    • 函数扩展
    • JSONPath 综合实战

字符编码与转义

字符编码:JSON 用什么编码?

什么是字符编码?

字符编码就是电脑存储和传输文字的方式。就像不同国家的人说不同语言,电脑也需要"约定"用哪种方式来理解文字。

JSON 的编码规则

根据 RFC 8259 规范:

JSON 文本必须使用 UTF-8 编码。

UTF-8 是目前世界上最通用的字符编码,它可以表示:

  • 英文字母、数字
  • 中文、日文、韩文
  • 阿拉伯文、俄文、希腊文
  • 各种表情符号
  • 世界上几乎所有的文字

为什么用 UTF-8?

编码支持中文?通用性
UTF-8✅ 支持🌍 全世界通用
GBK✅ 支持🇨🇳 主要在中国用
ASCII❌ 不支持🇺🇸 只支持英文
UTF-16✅ 支持部分系统用

💡 UTF-8 是互联网的事实标准。用 UTF-8 编码的 JSON,任何系统都能正确读取。

实际影响

当你保存一个 .json 文件时,请确保用 UTF-8 编码保存。如果用其他编码(如 GBK),中文可能会变成乱码:

❌ GBK 编码在其他系统打开:
   广州飞翔科技 → 

✅ UTF-8 编码在任何系统打开:
   广州飞翔科技 → 广州飞翔科技

字节顺序标记(BOM)

什么是 BOM?

BOM(Byte Order Mark)是放在文件开头的一个特殊标记,用来告诉程序"这个文件是 UTF-8 编码"。

JSON 的规定

RFC 8259 明确规定:

传输 JSON 文本时,不得在开头添加 BOM。

但同时又规定:

解析 JSON 的程序可以忽略 BOM,而不是报错。

总结:

  • 生成 JSON 时:不要加 BOM
  • 解析 JSON 时:如果遇到了 BOM,忽略它

实际建议

大多数现代编辑器(VS Code、Notepad++、Sublime)保存 UTF-8 时都有选项:

  • ✅ UTF-8(推荐,不带 BOM)
  • ❌ UTF-8 with BOM(不推荐)

转义字符详解

为什么需要转义?

有些字符在 JSON 中有特殊含义,如果直接写在字符串里,程序会"误会"。转义就是告诉程序:"请把我当成普通字符处理。"

必须转义的字符

根据 RFC 8259,以下字符必须转义:

字符名称转义写法原因
"双引号\"会结束字符串
\反斜杠\\会启动转义
U+0000 ~ U+001F控制字符\n、 \t 等不可见字符

常用转义序列

转义代表说明使用场景
\""双引号引用别人说的话
\\\反斜杠Windows 路径
\n换行Line Feed多行文本
\r回车Carriage ReturnWindows 换行
\t制表符Tab对齐文本
\b退格Backspace很少用
\f换页Form Feed很少用
\//斜杠可选,HTML 标签中常用

转义实战示例

示例 1:包含引号的标语

{
  "slogan": "鸣哥说:\"写文案写到秃头但永远热血!\"",
  "response": "翼王回:\"开会我喜欢拍桌子。\""
}

示例 2:Windows 文件路径

{
  "configPath": "C:\\Users\\AOXIANG\\Documents\\kimi\\workspace",
  "logPath": "D:\\WorkStation\\feixiang-it-v2\\logs",
  "sharedPath": "\\\\192.168.1.100\\shared\\docs"
}

💡 每个反斜杠都要写成 \\。路径 C:\Users 在 JSON 里要写 C:\\Users。

示例 3:多行地址

{
  "address": "北京市朝阳区前程似锦路88号\\n飞翔中文苑18栋6层",
  "shippingAddress": "广东省广州市天河区\\n飞翔科技园\\n技术部 航仔 收"
}

显示效果:

北京市朝阳区前程似锦路88号
飞翔中文苑18栋6层

示例 4:制表符对齐

{
  "table": "姓名\\t部门\\t职位\\n航仔\\t技术部\\t后端开发\\n图妹\\t产品部\\t产品经理"
}

显示效果:

姓名    部门    职位
航仔    技术部  后端开发
图妹    产品部  产品经理

Unicode 转义

用 Unicode 表示任意字符

JSON 支持用 \u 加上 4 位十六进制数来表示任何 Unicode 字符:

{
  "char1": "\u98de",
  "char2": "\u7fd4",
  "company": "\u98de\u7fd4\u4e2d\u6587\u7f51"
}
  • \u98de = 飞
  • \u7fd4 = 翔
  • \u4e2d = 中
  • \u6587 = 文
  • \u7f51 = 网

所以 "\u98de\u7fd4\u4e2d\u6587\u7f51" 就是 "飞翔中文网"。

什么时候用 Unicode 转义?

场景建议
正常写中文直接写 "飞翔",不要用 Unicode
特殊控制字符用 Unicode,如 \u0000
某些系统不支持中文输入用 Unicode
需要确保传输安全可以用 Unicode

扩展字符(Emoji 等)

对于超出基本平面的字符(如某些 Emoji),需要用 UTF-16 代理对 表示:

{
  "emoji": "\uD83D\uDE00"
}

\uD83D\uDE00 表示 😀(笑脸 Emoji)。

💡 实际开发中,如果系统支持,直接写 Emoji 更直观:"emoji": "😀"


常见错误

错误写法问题正确写法
"C:\Users\name"反斜杠未转义"C:\\Users\\name"
"他说:"你好""内部引号未转义"他说:\"你好\""
| `"第一行 第二行"` | 字符串内直接换行 | `"第一行\n第二行"` | | `"\u98de\u7fd4"` | 虽然合法,但没必要 | 直接写 `"飞翔"` |

一句话总结

提示

JSON 必须用 UTF-8 编码,不要加 BOM。字符串里的双引号用 \"、反斜杠用 \\、换行用 \n。Unicode 转义 \uXXXX 能表示任何字符,但中文直接写更方便!

上一页
布尔值和 Null
下一页
JSON 语法规则