どのように安全にマルチバイトのRuby / Railsの中にフィードを解析するには?
-
12-09-2019 - |
質問
タグ(申し訳ありませんが初心者くさい質問ならば...私は...正直、研究のビットをかなりやりました)
私はRSSを解析するために、いくつかのRuby on Railsのコードを書いている/ ATOMフィード。私のコードは、厄介な「£」記号上にアップを投げてます。
私が何かを行う前に、フィードの説明とタイトルのフィールドを正規化のアプローチをしようとしてきた。
descr = self.description.mb_chars.normalize(:kc)
それは£ 'で文字列を打つとき、しかし、私はmb_charsが問題に当たると、通常のRubyのStringオブジェクトを返すことを推測しています。私はエラーを取得します:
undefined method `normalize' for #<String:0x5ef8490>
だから、守備データベースに挿入するためにこれらの文字列を準備をするための最良の方法は何ですか?
(私もその上に文字列処理の束を行う必要があります)私の問題は、私は私が処理してるフィードの形式を知らないということで配合されます。例えば、私は次の行でいくつかの運を持っていた。
descr = Iconv.new('UTF-8//IGNORE', 'UTF-8').iconv descr
それは£」を検出したときにしかし、それは単にその時点以降のすべてを切り捨てます。
私はString.inspect機能を備えた「£」記号を表示する場合は、、それは「\ 243」において表示されます。この記号が「正しく」取引にメソッドを失敗すると、私は(「GBP」のような)別の値のためにそれを代用するのに十分な幸せになると思います。だから、同様に理解されるであろうと、コードのお手伝います。
問題のフィードは http://www.dailymail.coです。英国/スポーツ/サッカー/ index.rssする
解決 2
私はかなり基本的な何かが欠けていた - 。私が来ていた飼料のエンコーディングで推測された。
だから今、私は飼料自体にXML宣言の後、(b)のエンコーディング、HTTPレスポンスヘッダに(a)の文字セットで探しています。
私は、エンコーディングを持ってたら、私は、UTF-8にそれを移動するためのiconvを使用します。
これまでのところは良い。
他のヒント
私は1つのソリューションを見つけました
それを修正するために、私は、文書の$ KCODE(符号化)を定義する必要がありました。
require 'rubygems'
require 'active_support/all'
$KCODE = 'UTF8'
str = "test ščž"
puts str.parameterize.inspect
puts str.parameterize.to_s
=># =>テストSCZ
オリジナルのポスト:ます。https://rails.lighthouseapp .COM /プロジェクト/ 8994 /チケット/ 3504-文字列パラメータ化 - 正規化 - バグの