Вы назначаете строку в UTF-8. Он содержит ä
. UTF-8 представляет ä
с двумя байтами.
string = 'ä'
string.encoding
# => #<Encoding:UTF-8>
string.length
# 1
string.bytes
# [195, 164]
Затем вы заставляете байты интерпретироваться так, как если бы они были ISO-8859-1, без фактического изменения основного представления. Это больше не содержит ä
. Он содержит два символа: Ã
и ¤
.
string.force_encoding('iso-8859-1')
# => "\xC3\xA4"
string.length
# 2
string.bytes
# [195, 164]
Затем вы переводите это на UTF-8
. Поскольку это не переинтерпретация, а перевод, вы сохраняете два символа, но теперь кодируются в UTF-8:
string = string.encode('utf-8')
# => "ä"
string.length
# 2
string.bytes
# [195, 131, 194, 164]
Что вам не хватает, так это то, что вы изначально не имеют строку ISO-8859-1, как и с вашего веб-сервиса - у вас есть тарабарщина. К счастью, все это в ваших консольных тестах; если вы прочтете ответ веб-сайта, используя правильную кодировку ввода, все должно работать нормально.
. Для вашего теста на консоли давайте продемонстрируем, что если вы начинаете с соответствующей строки ISO-8859-1, все это works:
string = 'Norrlandsvägen'.encode('iso-8859-1')
# => "Norrlandsv\xE4gen"
string = string.encode('utf-8')
# => "Norrlandsvägen"
EDIT Для вашей конкретной проблемы это должно работать:
require 'net/https'
uri = URI.parse("https://rusta.easycruit.com/intranet/careerbuilder_se/export/xml/full")
options = {
:use_ssl => uri.scheme == 'https',
:verify_mode => OpenSSL::SSL::VERIFY_NONE
}
response = Net::HTTP.start(uri.host, uri.port, options) do |https|
https.request(Net::HTTP::Get.new(uri.path))
end
body = response.body.force_encoding('ISO-8859-1').encode('UTF-8')
Вот иначе, если Вы предпочитаете держать руку на мыши. Выберите новую фиксацию, и в правой панели устанавливают флажок "View all files". Теперь у Вас есть структурный вид всего репозитория, не только измененные файлы. Обзор в файл интереса, щелкните правой кнопкой и выберите "Историю Файла".