Вы можете использовать следующий фрагмент для преобразования UTF-8 в CP437 , которые охватывают некоторые символы Юникода (всего несколько). Windows 7 и старше предполагают, что имена файлов закодированы в CP437.
# first normalize the string
normalized_filename = input.mb_chars.normalize.to_s
# then encode in cp437
filename_for_zip = normalized_filename.encode("cp437")
# add file to zip
zipfile.add(filename_for_zip, pdf_file)