[英]Ruby Net::HTTP::Post overrides custom Content-Type header
[英]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.