xml 的亂碼問題...


#1

捉取一個網頁(return xml)…

http://clients1.google.com/complete/search?hl=zh_TW&output=toolbar&q=ruby

吐回來有中文字( 但 xml 中沒有寫 utf-8 的編碼.

用 純 rb 去寫個捉的頁面…
(curb,net::HTTP, rest-client, mechanize…)…
等等吐回來的都有中文亂碼的問題

在 rb 上面也有寫 Magic Column.

encoding: utf-8

頁面上有捉到文字…看到就是亂碼

用 encoding 看到是 utf-8.

但 force_encoding , encode 去修正的結果也還是一樣…
有時會出現 ascii-8bit 轉到 utf-8 的 error…

像這種純 xml 的回傳的中文亂碼怎解決??..

也嚐試用別人的gem (google_suggest 來捉&看看別人的 ruby 寫法…)


中文就也是亂碼…
(內容寫法羅輯差不多…)
英文的就是好好的…

請開示…


#2

A … 我在這類的 demo 的時候都有附上順序才是,這事情一直和工具無關,只和送出的封包的 header 有關

  1. 確定複製 dev tool 中的 cURL 可以在 terminal 下用,且資料正常,因為那是 1 : 1 的正常封包
  2. 刪除不必要的 header(就那堆 -H 一段一段刪,看是否一樣正常),把送出的資訊量降到最小
  3. 把指令寫成正規的 code

& 這就是我剛剛的測試,結論是他們有吃 User Agent …

先測試到最後結果剩下這個

curl 'http://clients1.google.com/complete/search?hl=zh_TW&output=toolbar&q=ruby' -H 'User-Agent: Mozilla/5.0'

也就是刪除到最短的資訊量後,再寫成正規 1 : 1 的 code

require 'curb'
curl = Curl.get('http://clients1.google.com/complete/search?hl=zh_TW&output=toolbar&q=ruby') do |http|
  http.headers['User-Agent'] = 'Mozilla/5.0'
end
puts curl.body
#=> 略過,正常中文的內容

以上


#3

原來檔頭有影響哦…

想說他直接吐 xml 而以(就是…一般不就 get 網址就吐回…那 google 還真的是…>_<)

還以為一直是 encode 的問題…

才發現檔頭有些 gem 會掛自已的 gem 檔頭…

如果真要假裝…就檔頭還是自已寫比較穩…

原來小細節在這哦…

感謝