我知道"\x86"
可以用来指定十六进制的unicode代码点。
但是,"\u{86}"
!= "\x7F"
。但是,"\u{7F}"
== \x
。
\u
和{{1}}转义序列之间的区别是什么?
答案 0 :(得分:2)
"\xNN"
似乎以十六进制格式处理ASCII码。 "\uNNNN"
和"\u{NN}"
以十六进制格式处理Unicode代码点。
ASCII只能以十进制格式(HEX:7F)达到127,这样就可以解释为什么代码点126(HEX:7E,"〜"字符)有效,但128(HEX:80) )及以上(HEX:85,86等)使用\xNN
转义序列无效。
你可以看到""""""通过使用String #codepoints方法。
puts "\x7F".inspect # "~"
puts "\x7F".codepoints # [126]
# =====================================
puts "\x80".inspect # "\x80" (Invalid ASCII codepoint.)
puts "\x80".codepoints # [65533]
# =====================================
puts "\u{80}".inspect # "\u0080" (Valid Unicode codepoint.)
puts "\u{80}".codepoints # [128]
Crystal用65533替换无效的代码点,替换字符基本上是,"这对于这种编码是无效的"。