2012-02-10 3 views
3

유니 코드 문자열 :루비 : 언 이스케이프 된 유니 코드 문자열

string = "CEO Frye \u2013 response to Capitalism discussion in Davos: Vote aggressively with your wallet against firms without social conscience." 

내가 (Is this the best way to unescape unicode escape sequences in Ruby?를 통해) 시도 :

def unescape_unicode(s) 
    s.gsub(/\\u([\da-fA-F]{4})/) {|m| [$1].pack("H*").unpack("n*").pack("U*")} 
end 

unescape_unicode(string) #=> CEO Frye \u2013 response to Capitalism discussion in Davos: Vote aggressively with your wallet against firms without social conscience. 

그러나 출력 (파일에) 아직 입력과 동일합니다! 어떤 도움을 주시면 감사하겠습니다.

편집 : 는 RubyMine를 사용하여, IRB를 사용하지 않는 입력은 따라서 하나의 "\u"하지 "\\u"

편집, 트위터에서 2 구문 분석 : RubyMine IDE Output

+1

""\ u2013 "은 문자 그대로 유니 코드 문자입니다."\\ u2013 "'을 (를) 사용 했습니까? –

+0

그게 아마 gsub의 문제인지 알 것입니다. 그것은 \ uu가 아니라 \ u를 찾고 있습니다 ... 나는 너무 잘 모르겠습니다. ("\ u2013"은 내가 분석 한 것인데, 수동 입력이 아닙니다.) –

+0

제가 말할 수있는 한, 아무 것도 없습니다. 정규식이나 'unescape_unicode'도우미에 문제가 있습니다. 질문에 정의 된대로 문자열에 이스케이프 할 항목이 없습니다. 문제는 파일에 쓰는 방법이 더 많을 수 있습니다. 문자열에 문제가 있음 –

답변

4

당신이 irb에서 그것을하려고, 또는 p 문자열을 출력 하시겠습니까? \uxxxx 형식으로

(irbp str에서 호출) String#inspect 변환 유니 코드 문자는 문자열 어디서나 인쇄 할 수 있습니다. 또한 "CEO Frye \u2013 response to..."을 입력하면 이는 루비 파서가 해결 한 이스케이프 시퀀스입니다. 최종 문자열에서 유니 코드 문자입니다.

str1 = "a\u2013b" 
str1.size #=> 3 
str2 = "a\\u2013b" 
str2.size #=> 8 
unescape_unicode(str2) == str1 #=> true 
+0

질문을 수정합니다. 문자열을 파일 (또는 p 문자열)에 쓸 때 이스케이프 처리 된 유니 코드를 씁니다. RubyMine IDE를 사용하여 IRB를 사용하지 않습니다. 문자열은 수동으로 입력하지 않고 트위터에서 가져옵니다. –

+0

맞아요. puts 대신 p를 사용하고 있습니다. 고맙습니다. –

관련 문제