【问题标题】:Issues with text parsing, Character looks like a longer 'hyphen' and has 3 ASCII values文本解析问题,字符看起来像一个更长的“连字符”并且有 3 个 ASCII 值
【发布时间】:2011-06-22 04:09:51
【问题描述】:

这里是恶魔角色;检查它我得到了 3 个 ASCII 值:

ASCII code 226 128 147

现在我想知道如何在我的正则表达式中使用这个字符。

【问题讨论】:

  • 在我看来它们就像 3 个恶魔般的整数

标签: ruby regex unicode ascii text-parsing


【解决方案1】:

这些都不是 ASCII 值,因为 ASCII 范围是 0 到 127,没有更高的值。 UTF-8 中的代码点 U+2010 HYPHEN 使用您在此处列出的三个字节值写入,如下所示:

$ perl -CS -e 'print "\x{2010}"' | perl -C0 -ne 'printf "%vd\n",$_'
226.128.144

您可以使用the uniprops script 获取该代码点的名称和字符属性:

$ uniprops U+2010
U+2010 ‹‐› \N{ HYPHEN }:
    \pP \p{Pd}
    All Any Assigned InGeneralPunctuation Common Zyyy Dash Dash_Punctuation Pd P General_Punctuation Gr_Base Grapheme_Base Graph GrBase Hyphen Punct Pat_Syn Pattern_Syntax PatSyn Print Punctuation

具有 Unicode Dash 属性的其他常见代码点包括 the unichars script 显示的代码点:

 $ unichars '\p{Dash}'
 -    45 002D HYPHEN-MINUS
 ‐  8208 2010 HYPHEN
 ‑  8209 2011 NON-BREAKING HYPHEN
 ‒  8210 2012 FIGURE DASH
 –  8211 2013 EN DASH
 —  8212 2014 EM DASH
 ―  8213 2015 HORIZONTAL BAR
 ⁓  8275 2053 SWUNG DASH
 ⁻  8315 207B SUPERSCRIPT MINUS
 ₋  8331 208B SUBSCRIPT MINUS
 −  8722 2212 MINUS SIGN

【讨论】:

  • 你能建议一些我可以在 Ruby 中做到这一点的方法吗?我是新手:D
  • @Shyman:问题在于您将输入和/或源代码视为字节数据,但您需要将它们视为 UTF-8 编码的 Unicode 字符。这两个你不知道怎么做?确保您使用的是 Ruby 1.9 或更高版本,并将 # encoding: UTF-8 放在脚本的顶部,以便将脚本的源代码理解为 UTF-8。您可能还需要在 #! 行上使用 -KU
  • @Shyman:你为什么不阅读this 了解 Ruby 和编码?
【解决方案2】:

可能是 Unicode。正确的答案是始终使用 Unicode。你最终会 如果您尝试将 Unicode 字符串视为 ASCII,则会遇到很多麻烦。

【讨论】:

  • 更准确地说,它可能是 UTF-8 (en.wikipedia.org/wiki/UTF-8),一种 Unicode 编码,旨在看起来像 ASCII(直到遇到 ASCII 中不存在的字符)。
猜你喜欢
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多