【问题标题】:What's the difference between "\x85" and "\u{85}" in Crystal?Crystal中的“\x85”和“\u{85}”有什么区别?
【发布时间】:2017-09-24 17:04:31
【问题描述】:

我知道\u{...} 可用于指定十六进制的 unicode 代码点。

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

\x\u 转义序列有什么区别?

【问题讨论】:

    标签: crystal-lang unicode-escapes


    【解决方案1】:

    "\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 替换无效的代码点,替换字符基本上表示“此编码无效”。

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 2015-06-12
      • 1970-01-01
      • 2012-05-08
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      相关资源
      最近更新 更多