2014-09-25 3 views
1

Я хочу, чтобы соответствовать китайское слово в строке, но это не удалосьКак соответствовать китайское слово в Ruby?

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>' 

Что случилось с ним?

Проблема очень странная, проблема с кодировкой символов?

+0

его работы, хотя для меня: '2.1.1: 002> "身高 455478" .scan (/ \ р {Han} /) => ["身", "高"] ' – aelor

+1

Невозможно воспроизвести. – sawa

+0

@AvinashRaj: Это (правильно) изменит способ регулярного выражения, но это не объясняет ошибку. –

ответ

4

Я могу воспроизвести проблему в 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, используя irb -E UTF-8.

Чтобы закодировать эту одну строку, используйте String#encode:

'身高455478'.encode('utf-8').scan(/\p{Han}/u) 
#=> ["\u8EAB", "\u9AD8"] 
+0

Я думал, что современный Ruby имеет UTF-8 по умолчанию. Это не относится к irb? – sawa

+0

@sawa Я в Китае, я думаю, irb читает среду с моей машины и автоматически устанавливает кодировку в 'GBK'. Честно говоря, иногда это беспокоит меня. –

+0

@Yu Hao но #encoding: utf-8 не работает в irb, как это сделать в irb? – user3673267