0
當使用Net::HTTP
類(Module?)時,我似乎有一個問題,即使響應將Content-Type頭設置爲charset等於ISO-8859-1,響應的編碼也是ASCII-8BIT。Net :: HTTP Ruby gem忽略了我的HTTP響應中的Content-type標頭?
我不是100%確定爲什麼這兩種編碼是不同的,或者它們有什麼不同,但我所知道的是隻有ISO-8859-1編碼才能讓我轉換爲UTF-8。即:
require 'net/http'
Net::HTTP.start(uri.host, uri.port) do |http|
request = Net::HTTP::Get.new uri
response = http.request request
end
response['Content-Type']
=> "text/html;charset=ISO-8859-1"
response.body.encoding
=> #<Encoding:ASCII-8BIT>
response.body.encode(Encoding::UTF_8)
Encoding::UndefinedConversionError: "\xE9" from ASCII-8BIT to UTF-8
這是怎麼回事?如果我的force_encoding
響應的正文爲Encoding::ISO_8859_1
,那麼轉碼工作。
是Net::HTTP
有問題嗎?
您確定服務器響應有效嗎?也許服務器的開發者只是沒有設置正確的價值? – spickermann
服務器響應有效;應該提到這一點。身體實際上編碼爲ISO-8859-1。但是看起來像我的猜測,「Net :: HTTP」在設計上只會假設爲「任意二進制」,因爲編碼是正確的,正如@ frederick-cheung在他的回答中所說的那樣。 – sameers