我想把中文单词串起来,但失败了

irb(main):016:0> "身高455478".scan(/\p{Han}/)
SyntaxError: (irb):16: invalid character property name {Han}: /\p{Han}/
    from C:/Program Files/Ruby-2.1.0/bin/irb.bat:18:in `<main>'

怎么了?
这个问题很奇怪,是字符编码问题吗?

最佳答案

我可以在IRB中重现这个问题。我的ruby环境和其他不能重现问题的人的不同之处在于,我在irb中的编码默认为GBK这是针对中文的。
这会重现问题:

#encoding:GBK
p "身高455478".scan(/\p{Han}/)

显示错误:invalid character property name {Han}: /\p{Han}/
要解决此问题,请使用utf-8编码:
#encoding:utf-8
p "身高455478".scan(/\p{Han}/)

输出:["\u8EAB", "\u9AD8"]
正如@stefan所建议的,要将irb设置为使用utf-8编码,请使用irb -E UTF-8启动irb。
要对这一个字符串进行编码,请使用String#encode
'身高455478'.encode('utf-8').scan(/\p{Han}/u)
#=> ["\u8EAB", "\u9AD8"]

07-25 21:40