Nokogiri gem으로 일부 HTML 스크래핑 및 구문 분석을 수행하는 Ruby 스크립트에 문자 인코딩 문제가 있습니다. 내가 Café
이 문자열의 일부 게재 볼 수있는, 내 로그에서스크랩 한 HTML의 Ruby 문자 인코딩 문제
./script.rb:333:in `join': incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)
: 스크립트의 한 시점에서,이 오류가 발생합니다 일부 HTML에서 가져온 된 문자열 배열에 join("\n")
전화 조인 작업에 포함됩니다.
내 배열의 일부 문자열은 ASCII-8BIT이고 일부는 UTF-8이고 루비는 결합 할 수 없습니까? Nokogiri로 구문 분석 한 후 (UTF-8로) 내 문자열을 변환하거나 살균해야합니까?
긁힌 HTML 콘텐츠에 대해 force_encoding('UTF-8')
및 encode('UTF-8')
을 시도했지만 다른 것을하기 전에 시도했지만 도움이되지 않았습니다. 사실 encode('UTF-8')
을 시도한 후 Café
이 포함 된 문자열에 to_s
을 호출했을 때 스크립트가 더 일찍 추락했습니다.
문자 인코딩은 항상 나를 혼란스럽게합니다. 이 오류를 피하기 위해 문자열을 살균 할 수있는 다른 방법이 있습니까?
편집 : 내가 최근 펄에서 비슷한 일을하고 Text::Unidecode
라는 모듈을 사용하고 문제가 문자를 예를 들어, 변환 함수에 내 문자열을 통과 할 수 있었다되었다
문자 a
은 일반 문자 a
에 예리합니다. 루비와 비슷한 점이 있나요? (이것은 내가 급성으로는 A를 유지할 수 있을지는하지만 목표로하고있어 그 내가 생각하는 것이 무엇 필요는 없다
Edit2가 :.
난 정말이 혼란스러워하고있어 어려운 증명하는 것 안정적으로 재현하는 몇 가지 코드입니다 :.
[CODE REMOVED]
EDIT3는 :
이 정확하지 않았기 때문에 나는 이전에 게시 된 코드 예제를 제거하지만 인쇄하거나를 호출 할 때마다 결론이다.긁힌 문자열에서 인코딩 오류가 발생합니다.
Edit4는 :
그것은 긁어 HTML 입력이 문제를 일으키는 무슨 아니었다 결국 밝혀졌다. 인쇄 할 때마다 인코딩 오류가 발생하거나 해시 된 텍스트를 포함하는 해시를 to_s로 호출 할 때마다 인코딩 오류가 발생합니다. '다른 것'은 데이터베이스 쿼리의 값이었고 ASCII-8BIT
에 반환되었습니다. 이 문제를 해결하기 위해 필자는 사용하는 각 데이터베이스 값에 force_encoding('UTF-8')
을 명시 적으로 호출해야했습니다 (비록 mysql2
보석이 자동으로이 작업을 수행하므로 전환해야 함).
나는 문자 인코딩이 싫다.
웹 페이지에 따르면, charset은 UTF-8입니다. 나는'resp = Net :: HTTP.get_response (uri)'와'Nokogiri :: HTML.parse (resp.body)'와 같은 페이지를 가져오고/읽는 중이다. – RTF
이것들 중 하나 (또는 둘 모두)를 특정 문자 인코딩을 사용하고 싶습니까? – RTF
"편집 ..."이라고 계속 말하는 것은 필요하지 않으며 바람직합니다. 필요한 경우 편집 한 내용을 볼 수 있습니다. 대신, 질문의 텍스트 흐름에 추가하는 내용이 의미가 있는지 확인하십시오. 자신이하는 일에 대해 설명하는 대신 최소한의 샘플 입력과 함께 문제를 설명하는 데 필요한 최소한의 코드를 제공하십시오. 설명하려고하는 것은 몇 줄의 코드와 거의 비슷하지 않습니다. –