2014-09-25 5 views
1

내가 문자열에 중국어 단어와 일치하기를 원하지만 그것이 뭐가 잘못어떻게 루비에서 중국어 단어와 일치 하는가?

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 (/ \ P {한} /) => [ "身", "高"] ' – aelor

+1

재생할 수 없습니다. – sawa

+0

@AvinashRaj : 정규식이 일치하는 방식을 (올바르게) 변경하지만 오류를 설명하지는 않습니다. –

답변

4

irb에서 문제를 재현 할 수 있습니다. 내 Ruby 환경과 문제를 재현 할 수없는 다른 사람들 사이의 차이점은 irb에서의 인코딩은 기본적으로 중국인을위한 GBK입니다. 이 문제 재현

:

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

출력 : ["\u8EAB", "\u9AD8"]

invalid character property name {Han}: /\p{Han}/

은 UTF-8 인코딩 문제를 해결 사용하려면

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

에러 도시


@Stefan이 제안한 것처럼 irb가 UTF-8 인코딩을 사용하도록 설정하려면 irb -E UTF-8을 사용하여 irb를 시작하십시오.

이 하나의 문자열을 인코딩하기 위해 사용 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