Я встречаю проблему с кодировкой ... Ошибок в консоли не возникает, но результат плохо кодируется. I должен использовать Digest::SHA1.hexdigest
на строке, а затем долженpack
результат.Ruby hexdigest sha1 pack ('H *') строковое кодирование ...
Приведенный ниже пример должен выводить '{'p) ODýGÎ- £ Iô8ü: iÀ', но он выводит '{? P) OD? GH? I? 8?: I?' в консоли и «{ p) OD G^BΗ I 8^D : i 'в файле журнала.
Итак, моя переменная под названием pack
равна '{? P) OD? GH? I? 8?: I?' а не '{'p) ODýGÎ- £ Iô8ü: iÀ'. Это большая проблема ... Я делаю это в задаче Rails. Любые идеи?
Благодаря
# encoding: utf-8
require 'digest/sha1'
namespace :my_app do
namespace :check do
desc "Description"
task :weather => :environment do
hexdigest = Digest::SHA1.hexdigest('29d185d98c984a359e6e6f26a0474269partner=100043982026&code=34154&profile=large&filter=movie&striptags=synopsis%2Csynopsisshort&format=json&sed=20130527')
pack = [hexdigest].pack("H*")
puts pack # => {?p)OD?GΗ?I?8?:i?
puts '{´p)ODýGΗ£Iô8ü:iÀ' # => {´p)ODýGΗ£Iô8ü:iÀ
end
end
end
Как вы знаете, выход должен быть «{'p) ODýGÎ- £ Iô8ü: iÀ '. В чем кодирование должно быть? –
Я знаю это, потому что я сделал тот же скрипт в php, отображаемый в браузере. Вы можете взглянуть на 2-й аргумент http://bit.ly/bF6nNr . Приложение моего рельса находится в utf8 и моих локальных серверах. – Gozup
Я не уверен, почему вы хотите, чтобы результат пакета являлся определенной * символьной * последовательностью? Обычно для байтовой строки, такой как дайджест, требуется соответствие определенной последовательности * байтов, а также необходимость ее отправки или сохранения с использованием четко определенной кодировки (шестнадцатеричный дайджест в ASCII - простая, но неэффективная схема).Если вы ожидаете определенную последовательность символов в качестве вывода и затем кодируете вывод вашего текущего веб-приложения, вам нужно будет указать кодировку, чтобы интерпретировать начальные байты байта как (я бы предположил, латинский-1), прежде чем вы конвертируете. –