루비/레일에서 멀티 바이트 피드를 안전하게 구문 분석하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1101724

  •  12-09-2019
  •  | 
  •  

문제

(새로운 질문이라면 죄송합니다 ... 솔직히 ...) 꽤 많은 연구를 해냈습니다 ...)

RSS/Atom Feeds를 구문 분석하기 위해 Ruby on Rails 코드를 작성하고 있습니다. 내 코드는 성가신 '£'기호로 던지고 있습니다.

나는 다른 일을하기 전에 피드의 설명과 제목 필드를 정규화하는 접근법을 시도해 왔습니다.

descr = self.description.mb_chars.normalize(:kc)

그러나 '£'로 문자열에 부딪히면 MB_CHARS가 문제를 일으켜 일반 루비 스트링 객체를 반환한다고 생각합니다. 오류가 발생합니다.

undefined method `normalize' for #<String:0x5ef8490>

그렇다면 데이터베이스에 삽입을 위해이 문자열을 방어 적으로 준비하는 가장 좋은 과정은 무엇입니까? (나는 그들에게도 많은 문자열 처리가 필요합니다)

내 문제는 내가 처리하는 피드의 형식을 모른다는 점에서 더욱 복잡해졌습니다. 예를 들어, 나는 다음 줄에 운이 좋았습니다.

descr = Iconv.new('UTF-8//IGNORE', 'UTF-8').iconv descr

그러나 '£'가 발생하면 그 시점 이후에 모든 것을 잘라냅니다.

string.inspect 함수로 '£'기호를 표시하면 ' 243'에 표시됩니다. 이 기호를 '정확하게'다루는 방법에 실패하면 다른 값 ( 'gbp'와 같은 다른 값으로 대체 할 수있을만큼 행복 할 것입니다. 따라서 해당 코드에 대한 도움도 감사하겠습니다.

문제의 피드는입니다 http://www.dailymail.co.uk/sport/football/index.rss

도움이 되었습니까?

해결책 2

나는 꽤 기본적인 것을 놓치고 있었다 - 나는 들어온 피드의 인코딩을 추측하고 있었다.

이제 (a) HTTP 응답 헤더의 숯불을보고있는 다음 (b) 피드 자체의 XML 선언의 인코딩을보고 있습니다.

인코딩이 있으면 ICONV를 사용하여 UTF-8로 이동합니다.

여태까지는 그런대로 잘됐다.

다른 팁

하나의 해결책을 찾았습니다.

그것을 고치려면 문서의 $ kcode (인코딩)를 정의해야했습니다.

require 'rubygems'
require 'active_support/all'

$KCODE = 'UTF8'

str = "test ščž"
puts str.parameterize.inspect
puts str.parameterize.to_s

=> # => test-scz

원본 게시물 : https://rails.lighthouseapp.com/projects/8994/tickets/3504-String-parameterize-normanize-bug

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top