跳到主要内容

7. Strings (字符串)

字符串 (string) 的表示方式类似于 C 语言家族所使用的约定. 字符串以引号 (quotation mark) 开始和结束. 所有 Unicode 字符都可以放在引号内, 但必须转义的字符除外: 引号, 反斜杠 (reverse solidus), 以及控制字符 (control character, U+0000 到 U+001F).

任何字符都可以被转义. 如果字符位于基本多文种平面 (Basic Multilingual Plane, U+0000 到 U+FFFF), 则它可以表示为一个六字符序列: 一个反斜杠, 后跟小写字母 u, 再后跟四个对该字符码点 (code point) 进行编码的十六进制数字. 十六进制字母 A 到 F 可以使用大写或小写. 因此, 例如, 只包含单个反斜杠字符的字符串可以表示为 "\u005C".

或者, 某些常用字符存在双字符序列的转义表示 (escape representation). 因此, 例如, 只包含单个反斜杠字符的字符串可以更紧凑地表示为 "\".

要转义不在基本多文种平面中的扩展字符, 该字符表示为一个 12 字符序列, 该序列对 UTF-16 代理对 (surrogate pair) 进行编码. 因此, 例如, 只包含 G clef 字符 (U+1D11E) 的字符串可以表示为 "\uD834\uDD1E".

string = quotation-mark *char quotation-mark

char = unescaped /
escape (
%x22 / ; " quotation mark U+0022
%x5C / ; \ reverse solidus U+005C
%x2F / ; / solidus U+002F
%x62 / ; b backspace U+0008
%x66 / ; f form feed U+000C
%x6E / ; n line feed U+000A
%x72 / ; r carriage return U+000D
%x74 / ; t tab U+0009
%x75 4HEXDIG ) ; uXXXX U+XXXX

escape = %x5C ; \

quotation-mark = %x22 ; "

unescaped = %x20-21 / %x23-5B / %x5D-10FFFF