簡體   English   中英

Net :: HTTP Ruby gem是否忽略了HTTP響應中的Content-type標頭?

[英]Is the Net::HTTP Ruby gem ignoring the Content-type header in my HTTP responses?

當使用Net::HTTP類(模塊?)時,我似乎有一個問題,即使響應將Content-Type標頭設置為具有等於ISO-8859-1的字符集,但響應的編碼為ASCII-8BIT。

我不是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是否Net::HTTP

Ruby不會自動設置響應的編碼(請參見ticket ),並且始終將編碼設置為ASCII-8BIT。

這是一個有點誤導的編碼名稱,因為它實際上表示“任意二進制數據”。 這就是為什么您需要先使用force_encoding設置編碼,然后才能將代碼轉碼為其他編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM