Что я делаю: Я использую гем gmail в приложении Rails 4 для получения вложений электронной почты из определенной учетной записи через регулярные промежутки времени.Вот выдержка из основной части (здесь для простоты рассматривается только первое письмо и его первое вложение):
require 'gmail'
Gmail.connect(@user_email,@user_password) do |gmail|
if gmail.logged_in?
emails = gmail.inbox.emails(:from => @sender_email)
email = emails[0]
attachment = email.message.attachments[0]
File.open("~/temp.csv", 'w') do |file|
file.write(
StringIO.new(attachment.decoded.to_s[2..-2].force_encoding("ISO-8859-15").encode!('UTF-8')).read
)
end
end
end
Кодировка вложенного файла может отличаться.В частности, у меня сейчас проблемы с финским языком.Он содержит финские символы и 3 надстрочных знака.
Это , что я ожидаю получить , когда я запускаю приведенный выше код.(Это то, что я получаю, когда загружаю вложение вручную через пользовательский интерфейс Gmail): 
В чем проблема:
Однако я получаю следующие странные результаты.
С cat temp.csv
(выглядит хорошо для меня): 
С nano temp.csv
(Здесь у меня естьПонятия не имею, на что я смотрю): 
Вот так выглядит файл temp.csv, открытый в Sublime Text (непосредственно через winscp).Первая строка и мелкие детали выглядят хорошо, но затем китайские / японские символы: 
Так выглядит temp.csv в Блокноте (после загрузки через winscp).Выглядит нормально, за исключением того, что между каждым символом вставлено пустое пространство, а новые строки отсутствуют: 
Что я пробовал:
У меня безуспешно пробовал:
.force_encoding(...)
со всеми различными наборами символов "ISO-8859-x" - , помещая
force_encoding("ISO-8859-15").encode!('UTF-8')
за пределами .read
(работает, но не решает проблему) - кодирует в UTF-8, не форсируя сначала другое кодирование, но это приводит к
Encoding::UndefinedConversionError: "\xC4" from ASCII-8BIT to UTF-8
- записи в двоичном виде с
'wb'
и 'w+b'
в File.open()
(что, как ни странно, никак не влияет на результат). - поиск в стеке потока и в Интернете другие идеи.
Любые идеи будут высоко оценены!