概要
下記URLのリンクカードが文字化けする。youtubeの動画は全て文字化けする。
@[card](https://www.youtube.com/watch?v=w1JPVRwNhaE)
バグの発生箇所
現在リンクカード処理内部でNet::HTTPを使ってURLにGETリクエストしているが、そこでencodingを明示的に指定していないのが原因。
Net::HTTPインスタンスのresponse_body_encodingはデフォルトでASCII-8BITとなっている。
https://github.com/ruby/ruby/blob/master/lib/net/http/response.rb#L246
ASCII-8BITはエンコーディング状態不明を表すEncodingオブジェクトであり、この状態のHTMLを(Gem内部で)Nokogiriに渡すことで文字化けしてしまう。
https://docs.ruby-lang.org/ja/latest/method/Encoding/c/ASCII_8BIT.html
https://techracho.bpsinc.jp/hachi8833/2018_07_02/58408
バグへの対策
Net::HTTPインスタンスを作成し、encodingを明示的に設定、その後GETリクエストを送るようにする。
参考: https://github.com/huyha85/opengraph_parser/pull/24/changes#diff-195c4daf411527ad371e957266022db77685731bd9caeff4a29e14f4a9defea2R28
期待される振る舞い
文字化けせず、正しくリンクカードが展開される
関連Issue
Ref: #9757, #7455
概要
下記URLのリンクカードが文字化けする。youtubeの動画は全て文字化けする。
@[card](https://www.youtube.com/watch?v=w1JPVRwNhaE)バグの発生箇所
現在リンクカード処理内部でNet::HTTPを使ってURLにGETリクエストしているが、そこでencodingを明示的に指定していないのが原因。
Net::HTTPインスタンスの
response_body_encodingはデフォルトでASCII-8BITとなっている。ASCII-8BITはエンコーディング状態不明を表すEncodingオブジェクトであり、この状態のHTMLを(Gem内部で)Nokogiriに渡すことで文字化けしてしまう。バグへの対策
Net::HTTPインスタンスを作成し、encodingを明示的に設定、その後GETリクエストを送るようにする。
参考: https://github.com/huyha85/opengraph_parser/pull/24/changes#diff-195c4daf411527ad371e957266022db77685731bd9caeff4a29e14f4a9defea2R28
期待される振る舞い
文字化けせず、正しくリンクカードが展開される
関連Issue
Ref: #9757, #7455