[RUBY-ON-RAILS] 레일 v3의 문자 인코딩 문제 / 루비 1.9.2
RUBY-ON-RAILS레일 v3의 문자 인코딩 문제 / 루비 1.9.2
내가 파일에서 내용을 읽을 때 나는 "UTF-8로 잘못된 바이트 시퀀스"이 오류 가끔를 얻을. 주 - 문자열의 일부 특수 문자가있는 경우에만 발생합니다. 나는없이 파일을 여는 시도했다 "R : UTF-8",하지만 여전히 같은 오류가 발생합니다.
open(file, "r:UTF-8").each_line { |line| puts line.strip(",") } # line.strip generates the error
파일의 내용 :
# encoding: UTF-8
290919,"SE","26","Sk‰l","",59.4500,17.9500,, # this errors out
290956,"CZ","45","HornÌ Bradlo","",49.8000,15.7500,, # this errors out
290958,"NO","02","Svaland","",58.4000,8.0500,, # this works
이것은 내가 외부에서받은 CSV 파일 만 내 DB로 가져, 그것은 "# 인코딩 : UTF-8"와 함께 제공되지 않은 시도하고 상단에,하지만 어딘가에는이 문제가 해결됩니다 읽을 수 있기 때문에 나는이 추가 하지만하지 않았다. :(
환경:
해결법
-
==============================
1.루비 각 파일에 대한 외부 및 내부 인코딩 부호화의 개념을 갖는다. 이 파일이 더 난해한 형식으로 저장하는 경우에도, 당신은 당신의 소스에서 UTF-8의 파일로 작업 할 수 있습니다. 기본 외부 인코딩이 UTF-8 (당신이 맥 OS X에 있다면 그것은이다) 인 경우, 파일 I의 모든 / O는 물론 UTF-8로 될 것입니다. 이 사용 File.open ( '파일'). external_encoding를 확인할 수 있습니다. 당신이 당신의 파일을 열고 통과 할 때 당신이하고있는 "R : UTF-8은"루비는 기본적으로 사용하고있는 동일한 외부 인코딩을 강제한다.
루비 각 파일에 대한 외부 및 내부 인코딩 부호화의 개념을 갖는다. 이 파일이 더 난해한 형식으로 저장하는 경우에도, 당신은 당신의 소스에서 UTF-8의 파일로 작업 할 수 있습니다. 기본 외부 인코딩이 UTF-8 (당신이 맥 OS X에 있다면 그것은이다) 인 경우, 파일 I의 모든 / O는 물론 UTF-8로 될 것입니다. 이 사용 File.open ( '파일'). external_encoding를 확인할 수 있습니다. 당신이 당신의 파일을 열고 통과 할 때 당신이하고있는 "R : UTF-8은"루비는 기본적으로 사용하고있는 동일한 외부 인코딩을 강제한다.
기회는 소스 문서가 UTF-8에없는 그 비 ASCII 문자 (그들이 있다면, 당신도 올바른 문자없이 오류를 얻을 것, 그리고 그들이 잘못에 의해 매핑 한 경우 UTF-8로 깔끔하게 매핑되지 않습니다이다 , 당신은) 잘못된 문자가없고 오류가 발생합니다. 당신이해야 할 것은 다음과 같이 읽기에 루비 트랜스에게 문서가 원본 문서의 인코딩을 결정하려고 할 것입니다 :
File.open(file, "r:windows-1251:utf-8").each_line { |line| puts line.strip(",") }
당신이 소스의 인코딩을 결정하는 데 도움이 필요하면이 파이썬 라이브러리에게 소용돌이를 제공합니다. 그것은 시몽 / 모질라에 있었다 (그리고 파이어 폭스에서 가능성이 여전히) 자동 캐릭터 감지 대체 기반으로.
-
==============================
2.당신이 당신의 파일 인코딩을 변경하려는 경우, 당신은 보석 '겨자과의 잡초 홈즈'를 사용할 수 있습니다
당신이 당신의 파일 인코딩을 변경하려는 경우, 당신은 보석 '겨자과의 잡초 홈즈'를 사용할 수 있습니다
$require 'charlock_holmes/string' content = File.read('test2.txt') if !content.is_utf8? detection = CharlockHolmes::EncodingDetector.detect(content) utf8_encoded_content = CharlockHolmes::Converter.convert content, detection[:encoding], 'UTF-8' end
그런 다음 임시 파일에 새 내용을 저장하고 원본 파일을 덮어 쓸 수 있습니다. 이 도움을 바랍니다.
from https://stackoverflow.com/questions/4697413/character-encoding-issue-in-rails-v3-ruby-1-9-2 by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 다른 ' "UTF-8"config.encoding ='과 : 루비 온 레일즈, 'UTF-8 #encoding'있다? (0) | 2020.03.04 |
---|---|
[RUBY-ON-RAILS] 3.1 include_root_in_json 레일 (0) | 2020.03.04 |
[RUBY-ON-RAILS] activestorage의 직접 업로드를 사용하여 S3에 업로드 할 때 어떻게 접두사를 지정하려면? (0) | 2020.03.04 |
[RUBY-ON-RAILS] 레일 : 부울의 유효성 검사 포함은 테스트를 실패 (0) | 2020.03.04 |
[RUBY-ON-RAILS] Heroku가 업로드 - 프리 D 자산은 실패 (0) | 2020.03.04 |