Rails 및 Ruby 1.9의 유효하지 않은 멀티 바이트 문자 (US-ASCII)


197

Rails 2.3.4에서 Ruby 1.9.1을 사용하고 있습니다. 애플리케이션은 텍스트 입력을 처리하는 것입니다.

같은 것을 시도하면 (내부 인용 부호가 다르게 보입니다)

text = "”“"

다음과 같은 오류가 발생합니다.

#<SyntaxError: /Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: invalid multibyte char (US-ASCII)
/Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: invalid multibyte char (US-ASCII)
/Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: syntax error, unexpected $end, expecting keyword_end

사용자가 따옴표를 입력 할 수 있으므로 따옴표를 사용해야하는데이를 설명해야합니까?

어떤 아이디어?


코드에 백틱이 없지만 백틱 사용으로 인해 "고발"된 경우 파일에 이상한 간격 / 탭 / 개행 문제가있을 수 있습니다. 예를 들어 StackOverflow 블랭크에 게시하면 SO가 이상하게 행동하기 시작합니다. 이상한 공백과 탭 및 줄 바꿈을 제거하십시오. 다시 한 번, 코드를 SO 빈칸에 붙여 넣고 프리젠 테이션을 위해 코드를 포맷하는 것은 힌트를주는 한 가지 방법입니다.
boulder_ruby 4

답변:


691

ASCII가 아닌 문자를 사용하는 스크립트에 마법의 설명을 추가해 보셨습니까? 스크립트 상단에 있어야합니다.

#!/bin/env ruby
# encoding: utf-8

그것은 매력처럼 나를 위해 일했습니다.


2
흠 ......... 파일 상단에 추가했지만 여전히 같은 오류 메시지가 나타납니다. 어떤 제안?
Artem Kalinchuk

8
중심 설명은 @dalyons 링크 기사에서 찾을 수 있습니다. 소스 파일은 달리 언급하지 않는 한 US-ASCII 인코딩을받습니다. 소스 인코딩을 변경하지 않고 ASCII가 아닌 내용을 문자열 리터럴에 배치하면 Ruby가 해당 오류로 죽습니다. 고마워, 나는 마침내 그것을 얻었다 :-)
bass-t

2
#!/bin/env ruby명령 행에서 스크립트를 실행 파일로 실행하지 않는 한 필요하지 않습니다. # encoding라인은 그 자체로 작동합니다.
gak

10
# encoding: utf-8. 2013 년 말이되었는데 여전히이 게임을해야합니다. 잠깐만 요, 전화벨이 울립니다 ... 2033 년이었고 그들은 여전히 ​​전화를 걸었습니다. 오, 잘 알려 줘서 고마워요. 2010 년 Jarek Zmudzinski.
thomax

1
@gotqn - 여기에 같은 기사를 찾아주세요 - graysoftinc.com/character-encodings/...
알록 스웨인

43

프로젝트의 모든 소스 파일에 마법의 주석을 쉽게 추가하려면 magic_encodinggem을 사용할 수 있습니다

sudo gem install magic_encoding

그런 다음 magic_encoding앱의 루트에서 터미널을 호출 하십시오.


나는 이런 종류의 세부 사항을 기억하는 것이 중요하다고 생각하므로 적어도 몇 달 동안 # 인코딩 : utf-8을 수동으로 쓰는 데는 그 보석을 사용하지 않을 것입니다.
Marcel Valdez Orozco

rails 2.3 & ruby ​​1.9의 gemfile에 'gem magic_encoding'을 추가하면 도움이 됨
Elmor

이것은 오이 테스트에 통합되지 않습니다.
Trip

1
@Elmor 절대로 외부 라이브러리를 프로젝트의 Gemfile에 넣지 말아야합니다. magic_encoding프로젝트 의존성이 아닌 명령 줄 도구 일뿐입니다.
Nowaker

17

방금 솔루션을 추가하고 싶습니다 :

ö, ü, ä와 같은 독일어 움라우트를 사용하고 동일한 오류가 발생했습니다.
@Jarek Zmudzinski가 방금 작동 방식을 알려 주었지만 여기 있습니다.

컨트롤러 상단에이 코드를 추가하십시오 # encoding: UTF-8
(예 : 움라우트와 함께 플래시 메시지 사용)

내 컨트롤러의 예 :

# encoding: UTF-8
class UserController < ApplicationController

이제 ö, ä, ü, ß, ""등을 사용할 수 있습니다.


8

기울어 진 큰 따옴표는 ASCII 문자가 아닙니다. 오류 메시지는 '멀티 바이트'라는 오해의 소지가 있습니다.


2
왜 오해의 소지가 있습니까? 그들은 있는 멀티 바이트 문자.
Matthew Scharley

4
ASCII는 멀티 바이트 인코딩을 정의하지 않기 때문입니다. ASCII에 관해서는, 관련 인코딩에서 유효합니다.
Phil Miller

8

루비 2.0부터는 추가 할 필요가 없습니다 # encoding: utf-8. UTF-8이 자동으로 감지됩니다.


8

그것은 나를 위해 일했다 :

$ export LC_ALL=en_US.UTF-8
$ export LANG=en_US.UTF-8
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.