Faraday: Content-Type์ด text/xml์ธ ๊ฒฝ์šฐ response.body๋Š” ASCII-8BIT์ž…๋‹ˆ๋‹ค. ๋ฌธ์ž ์ง‘ํ•ฉ=utf-8

์— ๋งŒ๋“  2012๋…„ 04์›” 16์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: lostisland/faraday

ํŒจ๋Ÿฌ๋ฐ์ด๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์Œ์˜ response.body ์ธ์ฝ”๋”ฉ์€ ASCII-8BIT์ž…๋‹ˆ๋‹ค.

  def self.search(term)
    connection = Faraday.new(url: 'https://en.wikipedia.org')
    response = connection.get do |req|
      req.options = { :timeout => 5, :open_timeout => 3 }
      req.url '/w/api.php' , action: 'opensearch', format: 'xml', search: term
    end
    puts response.body.encoding
  end

1.9.2์—์„œ๋Š” REXML์ด Encoding::CompatibilityError ์‹œํ‚ต๋‹ˆ๋‹ค.

ํŒจ๋Ÿฌ๋ฐ์ด๊ฐ€ UTF-8๋กœ response.body ๋ฅผ ์ œ๊ณตํ•˜๋„๋ก ๊ฐ•์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์„ ํ˜ธ ์†”๋ฃจ์…˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

response.body.force_encoding('utf-8')

Yahuda๋Š” ์—ฌ๊ธฐ ์— ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋…ผ๋ฌธ์„ ๊ฐ€์ง€๊ณ 

๋ชจ๋“  9 ๋Œ“๊ธ€

๋ฐฉ๊ธˆ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์•„์ด๋””์–ด?

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

response.body.force_encoding('utf-8')

Yahuda๋Š” ์—ฌ๊ธฐ ์— ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋…ผ๋ฌธ์„ ๊ฐ€์ง€๊ณ 

Faraday ๊ฐ€ ๊ธฐ๋ณธ ์–ด๋Œ‘ํ„ฐ์—์„œ ์‘๋‹ต ๋ณธ๋ฌธ

๊ทธ๋Ÿด ์ˆ˜ ์žˆ์ง€. ๋ฌธ์ œ๊ฐ€ ๋‹ค๋ฅธ ๊ณณ์— ์žˆ์œผ๋ฉด ๋‚˜ํƒ€๋‚˜๋Š” ๋Œ€๋กœ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ํ•ด๊ฒฐ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์‡ผ ์Šคํ† ํผ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

Faraday์˜ ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ซ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์–ด๋Œ‘ํ„ฐ(์ ์–ด๋„ net/http)๊ฐ€ ์ธ์ฝ”๋”ฉ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. Ruby์˜ Encoding.default_external์„ 'US-ASCII'์™€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ์„ค์ •ํ•œ ๋‹ค์Œ Content-Type = '...; charset=utf-8' ... net/http๋Š” charset ๋ฌธ์ž์—ด ์„

์ด์— ๋Œ€ํ•ด ์ข€ ๋” ์กฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์–ด๋Œ‘ํ„ฐ ์ค‘ ์ผ๋ถ€๋Š” Content-Type charset์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ผ๋ถ€๋Š” ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

EM-HTTP-์š”์ฒญ ์€ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. [ ์ปค๋ฐ‹ ].
ํ›„์›์ž๋Š” ์•Š์Šต๋‹ˆ๋‹ค. [ ์ปค๋ฐ‹ ].
HTTPClient๋Š” [[commit](https://github.com/nahi/httpclient/commit/e5efea5afb3b5cf6ead3a131644dee71be1ee5e9)] [[issue](https://github.com/nahi/httpclient/issues/26)]ํ•ฉ๋‹ˆ๋‹ค.
Typhoeus์™€ Excon(๊ทธ๋ฆฌ๊ณ  net/http)์€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์‹œ๋„ํ•˜์ง€ ์•Š๋Š” ์–ด๋Œ‘ํ„ฐ๋ฅผ ์œ„ํ•œ ์„ ํƒ์  ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๊ฒ ์ง€๋งŒ, ๋„ค, ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•„๋งˆ๋„ Faraday์˜ ์ฑ…์ž„์ด ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@chrismo ๋‹น์‹ ์€ ๋‚˜์˜ ์˜์›…์ž…๋‹ˆ๋‹ค. ์กฐ์‚ฌํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰