Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UrlFetchTitle: title のエンコーディングを適切に変換する #44

Closed
ochaochaocha3 opened this issue Apr 14, 2015 · 6 comments
Assignees
Labels
Milestone

Comments

@ochaochaocha3
Copy link
Member

Google 検索のような Shift_JIS のページを読み込んだとき、title の内容が UTF-8 に変換されないため、文字化けが起こる。そこで、brianmario/charlock_holmes という gem を使って文字コードを自動判別し、UTF-8 に変換するようにする。

参考:Ruby 1.9で文字コードの自動判別を行う – @masuidrive blog

@ochaochaocha3 ochaochaocha3 self-assigned this Apr 14, 2015
@ochaochaocha3 ochaochaocha3 added this to the v0.9.0 milestone Apr 14, 2015
@raa0121
Copy link
Member

raa0121 commented Apr 15, 2015

force_encoding("UTF-8") じゃ足りない?

@koi-chan
Copy link
Member

変換元の文字コードを特定するなら、持ってきたHTMLにあるMETAタグか、HTTPヘッダの中から情報をとってくる方が確実だ(HTTPプロトコル的に正しい?)と思います。

@ochaochaocha3
Copy link
Member Author

@raa0121
force_encoding('UTF-8') は元の文字コードが何であろうと UTF-8 と見なすという結果になるので、実質的に効果がないです。Nokogiri::HTML.#parse でエンコーディングを指定できるようです。

@koi-chan
Google 検索が Content-Type 内で UTF-8 を指定しているのに内容が実は Shift_JIS だった、という例でハマりまして…

@ochaochaocha3
Copy link
Member Author

@koi-chan
一応 Mechanize には、ページ内のメタ情報からエンコーディングを取ってくる処理があります。実装するときはこれが参考になりそうです。

https://github.com/sparklemotion/mechanize/blob/fccc0931feb3756fcd5c041bc7e9a300afe55f61/lib/mechanize/page.rb#L42-L53

ochaochaocha3 added a commit that referenced this issue Apr 15, 2015
fixed #44

charlock_holmes という gem を使って文字コードを自動判別し、Nokogiri
にそれを伝える。
文字コードの UTF-8 への変換は Nokogiri が自動的に行う。
@koi-chan
Copy link
Member

@ochaochaocha3
その間違っているGoogleの仕様は検証例から外していいように思いますが……むしろSEOなどうるさいGoogleがそれはいいのか(笑)。

@ochaochaocha3
Copy link
Member Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants