привет, я использую ruby на рельсах для генерации CSV. В нашем приложении мы планируем использовать мультиязычность (I18n) и столкнулись с проблемой при просмотре содержимого I18n в CSV-файле Windows Excel.
Хорошо с Linux (Ubuntu) и Mac.
Мы определили, что Windows Excel необходимо снова импортировать данные для просмотра фактических данных. При импорте мы получим больше вариантов выбора набора символов.
Но этому нельзя научить каждого пользователя, поэтому решение, которое мы ищем, - это открыть его двойным щелчком мыши.
Затем мы определили способ отображения данных в открытом режиме и в Windows Excel с помощью Aghuddleston gist . Добавлено по ссылке.
Пример содержания I18n
В Mac и Linux
шведский: Förnamn
Английский: Имя
В Windows
шведский: Förnamn
Английский: Имя
def user_information_report(report_file_path, user_id)
user = User.find(user_id)
I18n.locale = user.current_lang
open_mode = "w+:UTF-16LE:UTF-8"
bom = "\xEF\xBB\xBF"
body user, open_mode, bom
end
def headers
headers = [
"ID", "SDN ID",
I18n.t('sys_first_name'), I18n.t('sys_last_name'), I18n.t('sys_dob'),
I18n.t('sys_gender'), I18n.t('sys_email'), I18n.t('sys_address'),
I18n.t('sys_city'), I18n.t('sys_state'), I18n.t('sys_zip'),
I18n.t('sys_phone_number')
]
end
def body tenant, open_mode, bom
File.open(report_file_path, open_mode) do |f|
csv_file = CSV.generate(col_sep: "\t") do |csv|
csv << headers
tenant.patients.find_each(batch_size: 10) do |patient|
csv << [
patient.id, patient.patientid,
patient.first_name, patient.last_name, "#{patient.dob}",
"#{translate_gender(patient.gender)}", patient.email, "#{patient.address_1.to_s} #{patient.address_2.to_s}",
"#{patient.city}", "#{patient.state}", "#{patient.zip}",
"#{patient.phone_number}"
]
end
end
f.write bom
f.write(csv_file)
end
end
Важные вещи, на которые следует обратить внимание, это открытый режим и бомба
open_mode = "w +: UTF-16LE: UTF-8"
bom = "\ xEF \ xBB \ xBF"
Перед написанием CSV вставьте спецификацию
f.write bom
f.write (csv_file)
Windows и Mac
Файл можно открыть напрямую двойным щелчком мыши.
Linux (Ubuntu)
При открытии файла спросите опции разделителя -> выберите «TAB»