2012-07-04 2 views
12

난 그냥 RSpec에 사용하기 시작하고 난 단지 확인 일이 예상대로 작동하고 있는지 확인하기 위해 RSpec에의 GitHub의의의 repo에 대한 매우 간단한 테스트를 복사 :국제 문자는

require 'spec_helper' 

describe 'Home Page' do 
    it "Welcomes the user" do 
    visit '/products' 
    page.should have_content("Welcome") 
    end 
end 

문제점이 때 시작 문자열을 "Olá"또는 "Caçamba"와 같은 것으로 변경합니다. 특수 문자가있는 문자열입니다. 그렇게하면 다음 오류가 발생합니다.

invalid multibyte char (US-ASCII) (SyntaxError) 
invalid multibyte char (US-ASCII) 
syntax error, unexpected $end, expecting ')' 
page.should have_content("Olá") 

해결 방법에 대한 아이디어가 있습니까? 어쩌면 일부 구성 옵션? 덕분에 많은

+0

파일이 ASCII 또는 UTF-8로 저장되어 있습니까? – LanguagesNamedAfterCofee

+0

파일은 UTF-8 – thyagx

답변

28

은 파일의 상단에 magic comment을 놓치고있어 대부분의 경우 : 루비 기본 US-ASCII 인코딩 파일을 해석하려고 시도하고이 문자 때문에 실패하는이 지침없이

# encoding: UTF-8 

세트에는 á 또는 ç과 같은 기호는 포함되지 않습니다.

James Edward Gray II가 Ruby에서 기본 소스 인코딩을 사용하는 경우는 blog post입니다.

+2

으로 저장되었습니다.이 메모를 .rb 파일에 신속하게 추가하는 데 도움이되는 멋진 보석 인 [magic_encoding] (https://github.com/m-ryan/magic_encoding/)이 있습니다. –

+0

KL-7을 고쳐 주셔서 고맙습니다 :) magic_encoding gem도 매우 유용합니다. 감사합니다. @naliwajek – thyagx

+0

그건 .. 정말 쉽지 않았습니다. 감사! – Trip

0

국제 문자는 대부분 영어 알파벳, 숫자 및 키보드에서 찾은 작은 기호 집합 (US 키보드를 사용하는 경우) 인 US-ASCII 범위를 벗어나는 값을 사용합니다. 악센트, 팬시 또는 문자가 아닌 문자 (예 : 이모티콘)는 US-ASCII를 나타내는 데 사용되는 둘 이상의 바이트로 표시됩니다. 문자에 대한 숫자 값의 매핑은 인코딩을 호출합니다. US-ASCII 다음에는 파일에 악센트를 추가하는 ISO-8891-1이 있습니다 (대부분 스페인어, 프랑스어, 스웨덴어 등) (예 : é, å, ü 등). 그 다음에는 ", ‰, Ó, ◊, 또는 거의 언어로 생각할 수있는 거의 모든 기호가 포함 된 유니 코드를 얻을 수 있습니다.

루비는 기본적으로 프로그램 및 모든 문자열을 US-ASCII로 인코딩합니다. 당신은 마법의 코멘트와 함께 전체 파일의 인코딩 (그리고 모든 것을)을 변경할 수 있습니다 (KL-7의 답변을 @ 참조) 또는 문자열 단위로 문자열을 변경할 수 있습니다

"Olé".force_encoding("ISO-8891-1") 

루비도 지원 ASCI 8-bit라고 불리는 가상의 인코딩. 인코딩이없는 바이너리 데이터입니다.

+1

'force_encoding'은 나중에 문자열로 작업하는 데 도움이 될 것이라고 생각하지만, 원래 문자열 리터럴을 구문 분석하는 데 인터프리터가 도움이되지는 않습니다. 내가 맞습니까? 다음은 Ruby의 문자열 인코딩 관련 [article] (http://blog.grayproductions.net/articles/ruby_19s_string)입니다. –

+0

@ KL-7 : 네. 네가 옳아. 마법의 코멘트가 필요합니다. – Linuxios