내 레일 3.2.2/루비 1.9.3 응용 프로그램과 같은 검색 요청 가져옵니다루비에서 문자 인코딩을 결정 1.9.3
http://booko.com.au/books/search?q=Fran%E7ois+Vergniolle+de+Chantal
루비/레일이 쿼리를 받아 그것을 디코딩 -하지만 UTF-의 가정을 8.
q="Fran%E7ois+Vergniolle+de+Chantal"
=> "Fran%E7ois+Vergniolle+de+Chantal"
CGI.unescape(q)
=> "Fran\xE7ois Vergniolle de Chantal"
CGI.unescape(q).encoding.name
=> "UTF-8"
CGI.unescape(q).valid_encoding?
=> false
이 처리하는 올바른 방법은 무엇입니까 :
invalid byte sequence in UTF-8
app/models/product.rb:694:in `upcase'
은 내가 이런 일을 생각 : 어떤 시점에서 나는거야? 올바른 인코딩으로 코드 변환하고 싶습니다 -하지만 어떻게 현재 인코딩을 결정합니까?
q = q.unpack('C*').pack('U*')
이 처리하는 올바른 방법은 무엇입니까 : 나는 어딘가의 블로그에서 발견
q.encode!("ISO-8859-1", "UTF-8", :invalid => :replace, :undef => :replace, :replace => "")
또는 일을 뭔가 : 나는 현재하고 있어요 무엇, 바로 가정입니다 그것은 LATIN1입니까?
편집 는 서버가 제대로 "콘텐츠 형식 : text/html; 문자셋 = UTF-8"을 보내는 헤더를 클라이언트에. 이 페이지에는 적절한 메타 태그도 포함되어 있습니다. 'meta http-equiv = "content-type"content = "text/html; charset = UTF-8"'
클라이언트에게 인코딩을 알리는 다른 방법이 있는지 확실하지 않습니다 사용?
'# coding : UTF-8'을'app/models/product.rb'의 맨 위에 쓰면 어떨까요? 그 오류를 해결해야한다고 생각합니다. 이 솔루션에 만족하십니까? – ck3g
@ ck3g, 아니요, 여기 엔 파일 인코딩이 아닙니다. – fl00r
같은 바이트 '0xE7'이 Latin1 이외의 다른 인코딩에서 유효 문자 일 수 있기 때문에 올바른 인코딩을 결정하기 위해 사전을 사용해야합니다. –