RUBY_VERSION = ruby-1.8.7-p358 RAILS_VERSION = rails (2.3.2)
фрагмент кода
```
def export_to_excel
csv_text = get_csv_string
headers['Content-Type'] = "application/vnd.ms-excel"
headers['Cache-Control'] = ''
send_data csv_text, :type => 'text/csv; charset=utf-8; header=present', :disposition => "attachment;filename = "new_report.csv"
end
```
Проблема : при загрузке файлаи открыть его в офисе Excel или Libre, он показывает ненужные символы.Я должен вручную пойти и установить кодировку UTF-8 для символов в файле, которые будут распознаны.
То, что я опробовал
- Проблема кодировки символов при экспорте данных рельсов в CSV
- при изменении строки csv с помощью Iconv на WINDOWS-1252 с помощью Iconv.iconv ('UTF-8 // IGNORE', 'WINDOWS-1252', final_csv_str)
- Я использую FasterCSV.generate для создания строки csv.Я пытался использовать FasterCSV.generate (: encoding => "u").Это также не сработало, поскольку само по умолчанию - utf-8.
- Когда я открыл файл в LibreOffice, по умолчанию он выбирал кодировку как ISO-8859-14.Я также пытался конвертировать UTF-8 в этот формат.Это не сработало.
Я предполагаю, что есть какой-то заголовок, который я должен добавить к самому файлу, чтобы файл распознавался как кодировка UTF-8, так как установка charset= utf-8 будет уведомлять только браузер.
Кто-нибудь может предложить какие-нибудь идеи?
ОБНОВЛЕНИЕ:
Мое фактическое требование было сделать файлыработать, не требуя от пользователя каких-либо дополнительных шагов.Для этого требования работает следующее решение
- Конвертировать CSV в UTF-16
- Вставить спецификацию в начало файла
- Использовать вкладку в качестве разделителя полей
Кто-то пошел и перепробовал все комбинации трех вышеперечисленных и выяснил это. Ссылка: https://wiki.scn.sap.com/wiki/display/ABAP/CSV+tests+of+encoding+and+column+separator?original_fqdn=wiki.sdn.sap.com
Источник, который привел к вышеуказанной ссылке, взят из этого поста:
Microsoft Excel искажает диакритические знаки в файлах .csv?
Для нашего случая использования просто добавление последовательности символов спецификации ("\ xEF \ xBB \ xBF") к началу строки csv работает.
Ссылка:
Какзаписать маркер спецификации в файл в Ruby
Другие полезные вопросы
- Можно ли принудительно заставить Excel автоматически распознавать файлы UTF-8 CSV?
- https://softwareengineering.stackexchange.com/questions/372692/should-utf-8-csv-files-contain-a-bom-byte-order-mark
- Чем отличается UTF-8 от UTF-8 без спецификации?
- Как записать маркер спецификации вфайл в Ruby