" \ x85"之间的区别是什么?和" \ u {85}"在水晶?

时间:2017-09-24 17:04:31

标签: crystal-lang unicode-escapes

我知道"\x86"可以用来指定十六进制的unicode代码点。

但是,"\u{86}"!= "\x7F"。但是,"\u{7F}" == \x

\u和{{1}}转义序列之间的区别是什么?

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替换无效的代码点,替换字符基本上是,"这对于这种编码是无效的"。