use*_*267 3 ruby regex encoding chinese-locale
我想匹配字符串中的中文单词,但失败了
\n\nirb(main):016:0> "\xe8\xba\xab\xe9\xab\x98455478".scan(/\\p{Han}/)\nSyntaxError: (irb):16: invalid character property name {Han}: /\\p{Han}/\n from C:/Program Files/Ruby-2.1.0/bin/irb.bat:18:in `<main>\'\nRun Code Online (Sandbox Code Playgroud)\n\n它出什么问题了?
\n\n问题很奇怪,难道是字符编码的问题?
\n我可以在 irb 中重现该问题。我的 Ruby 环境与其他无法重现该问题的环境之间的区别在于,我在 irb 中的编码默认GBK为中文。
这可以重现该问题:
\n\n#encoding:GBK\np "\xe8\xba\xab\xe9\xab\x98455478".scan(/\\p{Han}/)\nRun Code Online (Sandbox Code Playgroud)\n\n显示错误:invalid character property name {Han}: /\\p{Han}/
要解决此问题,请使用 UTF-8 编码:
\n\n#encoding:utf-8\np "\xe8\xba\xab\xe9\xab\x98455478".scan(/\\p{Han}/)\nRun Code Online (Sandbox Code Playgroud)\n\n输出:["\\u8EAB", "\\u9AD8"]
正如 @Stefan 所建议的,要将 irb 设置为使用 UTF-8 编码,请使用 启动 irb irb -E UTF-8。
要对这一字符串进行编码,请使用String#encode:
\n\n\'\xe8\xba\xab\xe9\xab\x98455478\'.encode(\'utf-8\').scan(/\\p{Han}/u)\n#=> ["\\u8EAB", "\\u9AD8"]\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1877 次 |
| 最近记录: |