我想把中文单词串起来,但失败了
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"]