0

我正在尝试使用 undecoder gem,它给我一些字符串带来了问题:

require 'unidecoder'
str = "\u00A3"
str.to_ascii

#: (C:/Ruby193/lib/ruby/gems/1.9.1/gems/unidecoder-1.1.1/lib/unidecoder/data/x00.yml): 在第 2 行解析引号 d 标量时发现未知转义字符第 3 列来自 C:/Ruby193/lib/ruby/1.9.1/psych.rb:203:in parse' from C:/Ruby193/lib/ruby/1.9.1/psych.rb:203:inparse_stream' 来自 C:/Ruby193/lib/ruby/1.9.1/psych.rb:151:in parse' from C:/Ruby193/lib/ruby/1.9.1/psych.rb:127:inload' 来自 C :/Ruby193/lib/ruby/1.9.1/psych.rb:297:in block in load_file' from C:/Ruby193/lib/ruby/1.9.1/psych.rb:297:inopen' 来自 C:/Ruby193/lib/ruby/1.9.1/psych.rb:297:in load_file' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/unidecoder-1.1.1/lib/unidecoder.rb:8:in block in '来自 C:/Ruby193 /lib/ruby/gems/1.9.1/gems/unidecoder-1.1.1/lib/unidecoder.rb:78:in yield' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/unidecoder-1.1.1/lib/unidecoder.rb:78:in default' 来自 C:/Ruby193/lib/ruby/gems/1.9.1/gems/unidecoder- 1.1.1/lib/unidecoder.rb:78:in decode_char' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/unidecoder-1.1.1/lib/unidecoder.rb:39:in block in decode' 来自 C:/Ruby193/lib/ruby/gems/1.9.1/gems/unidecoder-1.1.1/lib/unidecoder.rb:37:in gsub' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/unidecoder-1.1.1/lib/unidecoder.rb:37:in 从 C:/Ruby193/lib/ruby/gems/1.9.1/gems/unidecoder-1.1.1/lib/unidecoder.rb:16:in 解码 to_ascii' from (irb):21 from C:/Ruby193/bin/irb:12:in'>>

更糟糕的是,我无法通过以下方式捕获错误:

foo = str.to_ascii rescue 'x'

有谁知道这里发生了什么?

4

2 回答 2

1

看看“C:/Ruby193/lib/ruby/gems/1.9.1/gems/unidecoder-1.1.1/lib/unidecoder/data/x00.yml”。第 2 行是一个 YAML 条目- "\z",它在 Ruby 中不是一个有效的转义序列(而是一个用于标记字符串结尾的正则表达式锚点)。这可能是一个错误。您可以将此行编辑为- "\x00".

但是,"\u00A3"(£) 不是有效的 ASCII 字符,我没有找到将其编码为 ASCII 的意义。

引发的异常是 Psych::SyntaxError,正如@mudasobwa 评论的那样,您可以捕获该特定异常。

于 2013-03-25T04:56:29.277 回答
1

没有参数列表的救援子句,参数默认为 StandardError;看起来unidecoder引发了其他异常,但堆栈跟踪似乎不完整(它应该显示异常类型。)

于 2013-03-25T05:06:43.707 回答