2012-05-27 3 views
1
내가 들어오는 전자 메일을 구문 분석하고 데이터베이스에 UTF-8 인코딩 된 문자열로 몸을 저장할려고

그러나 나는 빨리 발견 한 모든 전자가 -mails는 Content-Type 헤더에 문자 세트 정보를 보냅니다. String.force_encodingString.encode와 일부 수동 빠른 수정을 시도 후에 나는 SO의 친절한 사람들을 요청하기로 결정했다. 마임 신체 추측 캐릭터 세트 (와 UTF-8로 변환)은

내가 그것을 테스트 전자 메일을 보낸 후 그러나 항상 ASCII-8BIT 나타납니다, 나는 비밀리에 자동적으로 문자열에 사용되는 인코딩을 반환하는 String.encoding 기대했다 정직합니다. 난 내가 일부 ;charset=blabla 정보를 먹은 경우 일 것 같았다 옵션으로 quoted-printable을 구현했을 때이 문제가 시작했다. 나는 몇 가지 "솔루션"을 실험했습니다

input = input.gsub(/\r\n/, "\n").unpack("M*").first 
if(charset) 
    return input.force_encoding(charset).encode("utf-8") 
end 

# This is obviously wrong as the string is not always ISO-8859-1 encoded: 
return input.force_encoding("ISO-8859-1").encode("utf-8") 

내가 그러나 대부분의 읽기/쓰기 파일과 관련이 듯, 인터넷에서 발견하고, 인코딩을 검출하는 몇 가지 보석 실험 (그러나 아무도 정말로 것 같았다 속임수 또는 믿을 수 없게 구식이었다). 대답은 바로 내 얼굴을 쳐다보고 것처럼이 가능해야하고, 느낌, 여기에 희망 누군가가 내 상황에 대한 몇 가지 빛을 내가 완전히 잘못 뭘했는지 말해 줄 수있을 것입니다.

답변

0

를 사용하여. 여기

예 :

irb(main):001:0> require 'rubygems' 
=> true 
irb(main):002:0> require 'UniversalDetector' 
=> false 
irb(main):003:0> p UniversalDetector::chardet('hello') 
{"encoding"=>"ascii", "confidence"=>1.0} 
=> nil 
+0

흠이 실제 'chardet' 보석의 포트 보인다. 로드를 시도하자마자 원래의 프로그램이 중단되지만 집에 돌아와서 결과를 게시 할 때이 코드를 시도해 보겠습니다. – CharlesLeaf

+0

이 버전의 젬은 조금 낡은 것처럼 보입니다. 필자의 테스트 문자열을 삽입하는 방법에 따라 ASCII로 1.0 신뢰도를 표시하거나'CodingStateMachine에서 유래 된 것으로 보이는 정수를 문자열로 변환 할 수 없습니다 '라고 표시됩니다. rb'이'byteCls = @_mModel [ 'classTable'] [c]'이 문제를 해결할 수 있는지 더 자세히 조사 할 필요가 있습니다. – CharlesLeaf

+0

어떻게이 일에 대해 : https://github.com/brianmario/charlock_holmes – Hooopo

0

당신이 https://github.com/fac/cmess를 시도?

== DESCRIPTION CMess 는 여러 가지 문제가 문자 집합과 인코딩과 관련하여 발생하는 상대 목표 그 후드 여러 도구 번들

. 현재, 다음이 있습니다 :

guess_encoding :: 주어진 문자열의 인코딩을 식별하는 간단한 도우미. 자동 입력의 인코딩 를 검출하는 기능을 포함한다.

[...]