Я программно экспортирую данные (используя PHP 5.2) в тестовый файл .csv.
Пример данных: Numéro 1
(обратите внимание на ударение на е). Данные utf-8
(без предварительной спецификации).
Когда я открываю этот файл в MS Excel, отображается как Numéro 1
.
Я могу открыть это в текстовом редакторе (UltraEdit), который отображает его правильно. УП сообщает, что персонаж decimal 233
.
Как я могу экспортировать текстовые данные в файл .csv, чтобы MS Excel правильно их отобразил , желательно без принудительного использования мастера импорта или настроек мастера по умолчанию?
excel
encoding
csv
diacritics
Freddo411
источник
источник
Ответы:
Правильно отформатированный файл UTF8 может иметь метку порядка байтов в качестве первых трех октетов. Это шестнадцатеричные значения 0xEF, 0xBB, 0xBF. Эти октеты служат для пометки файла как UTF8 (поскольку они не относятся к информации «порядка байтов»). 1 Если эта спецификация не существует, потребитель / читатель должен определить тип кодировки текста. Считыватели, не поддерживающие UTF8, будут считывать байты как некоторые другие кодировки, такие как Windows-1252, и отображать символы

в начале файла.Существует известная ошибка, при которой Excel при открытии файлов CSV UTF8 через сопоставление файлов предполагает, что они находятся в однобайтовой кодировке, независимо от наличия спецификации UTF8. Это не может быть исправлено ни одной системной кодовой страницей или настройкой языка по умолчанию. Спецификация не будет подсказывать в Excel - она просто не будет работать. (В отчете меньшинства утверждается, что в спецификации иногда запускается мастер «Импорт текста».) Эта ошибка существует в Excel 2003 и более ранних версиях. Большинство отчетов (среди ответов здесь) говорят, что это исправлено в Excel 2007 и новее.
Обратите внимание, что вы всегда можете * правильно открыть файлы CSV UTF8 в Excel с помощью мастера «Импорт текста», который позволяет указать кодировку открываемого файла. Конечно, это гораздо менее удобно.
Читатели этого ответа, скорее всего, находятся в ситуации, когда они не поддерживают Excel <2007, но отправляют необработанный текст в формате UTF8 в Excel, который неправильно его интерпретирует и окропляет ваш текст
Ã
другими аналогичными символами Windows-1252. Добавление спецификации UTF8, вероятно, является вашим лучшим и быстрым решением.Если вы застряли с пользователями более старых версий Excels, и Excel является единственным потребителем ваших CSV-файлов, вы можете обойти эту проблему, экспортировав UTF16 вместо UTF8. Excel 2000 и 2003 дважды щелкнет, чтобы открыть их правильно. (Некоторые другие текстовые редакторы могут иметь проблемы с UTF16, поэтому вам, возможно, придется тщательно взвесить ваши варианты.)
* За исключением случаев, когда вы не можете, (по крайней мере) мастер импорта Excel 2011 для Mac не всегда работает со всеми кодировками, независимо от того, что вы говорите. </ anecdotal-доказательство> :)
источник

в первой ячейке; или что-то еще полностью.
). Это только помогает угадывать алгоритмы и для форматов файлов, которые специально учитывают это (например, XML). Недостаток включения искусственной спецификации в файлы UTF-8 состоит в том, что вы нарушаете их ASCII-совместимость (главное преимущество для UTF-8). Многие неосведомленные о кодировании текстовые инструменты сломаются, столкнувшись с неожиданной ведущей поддельной спецификацией.Предзаказ спецификации (\ uFEFF) работал для меня (Excel 2007), в которой Excel распознал файл как UTF-8. В противном случае сохранение и использование мастера импорта работает, но не так идеально.
источник
\ufeff
это спецификация UTF-16 (BE), а не спецификация UTF-8Ниже приведен код PHP, который я использую в своем проекте при отправке Microsoft Excel пользователю:
ОБНОВЛЕНО: улучшение имени файла и исправление ошибок правильного расчета длины. Благодаря TRiG и @ ivanhoe011
источник
'Content-Disposition: attachment; filename="'.$filename.'.csv"'
потому что Firefox хочет двойные кавычки, иначе он будет отрезать ваше имя файла после пробела.text/csv
), но называете его Excel (application/vnd.ms-excel
)?header('Content-Length: '. mb_strlen($encoded_csv, 'UTF-16LE'));
?Ответ для всех комбинаций версий Excel (2003 + 2007) и типов файлов
Большинство других ответов здесь касаются только их версии Excel и не обязательно помогут вам, потому что их ответ может не соответствовать вашей версии Excel.
Например, добавление символа спецификации создает проблемы с автоматическим распознаванием разделителя столбцов, но не с каждой версией Excel.
Есть 3 переменные, которые определяют, работает ли он в большинстве версий Excel:
Кто-то стоик в SAP попробовал каждую комбинацию и сообщил о результате. Конечный результат? Используйте UTF16le с спецификацией и символом табуляции в качестве разделителя, чтобы он работал в большинстве версий Excel.
Ты мне не веришь? Я бы тоже не стал, но читаю здесь и плачу: http://wiki.sdn.sap.com/wiki/display/ABAP/CSV+tests+of+encoding+and+column+separator
источник
sep=,
или что вы хотите использовать? Если вы уже добавляете спецификацию, я предполагаю, что вы не против добавления материала в файл.выберите UTF-8 enconding при импорте. если вы используете Office 2007, вы выбрали именно его: сразу после открытия файла.
источник
Отобразите спецификацию UTF-8 перед выводом данных CSV. Это исправляет все проблемы персонажей в Windows, но не работает для Mac.
Это работает для меня, потому что мне нужно создать файл, который будет использоваться только на ПК с Windows.
источник
UTF-8 не работает для меня в Office 2007 без какого-либо пакета обновления, с или без спецификации (U + ffef или 0xEF, 0xBB, 0xBF, ни работает), установка sp3 заставляет UTF-8 работать, когда 0xEF, 0xBB, 0xBF BOM предваряется.
UTF-16 работает при кодировании в python с использованием «utf-16-le» с добавленной 0xff 0xef BOM и использованием табуляции в качестве разделителя. Мне пришлось вручную выписать спецификацию, а затем использовать «utf-16-le», а не «utf-16», в противном случае каждый encode () добавлял спецификацию к каждой записанной строке, которая отображалась как мусор в первом столбце вторая строка и после.
Я не могу сказать, будет ли UTF-16 работать без установленного sp, так как я не могу вернуться назад. вздох
Это на windows, не знаю про офис для MAC.
для обоих рабочих случаев импорт работает при запуске загрузки непосредственно из браузера, а мастер импорта текста не вмешивается, он работает так, как вы ожидаете.
источник
Как сказал Фрегал, \ uFEFF - это путь.
источник
Я также заметил, что на этот вопрос «ответили» некоторое время назад, но я не понимаю историй, в которых говорится, что вы не можете открыть CSV-файл с кодировкой utf8 в Excel без использования текстового мастера.
Мой воспроизводимый опыт: Тип
Old MacDonald had a farm,ÈÌÉÍØ
введите в Блокнот, нажмите Enter, затем Сохранить как (используя опцию UTF-8).Использование Python, чтобы показать, что на самом деле там:
Хорошо. Блокнот поставил спецификацию спереди.
Теперь перейдите в Windows Explorer, дважды щелкните по имени файла или щелкните правой кнопкой мыши и используйте «Открыть с помощью ...», и откройте Excel (2003) с отображением, как и ожидалось.
источник
open('oldmac.csv', 'rb').read()
чтобы проверить свои данные?Вы можете сохранить html-файл с расширением «xls», и акценты будут работать (по крайней мере, до 2007 года).
Пример: сохраните это (используя Save As utf8 в Блокноте) как test.xls:
источник
border="1"
к столу, вы делаете получаете линии, но только вокруг 4 клетки :)Это просто вопрос кодировки символов. Похоже, вы экспортируете свои данные как UTF-8: é в UTF-8 - это двухбайтовая последовательность 0xC3 0xA9, которая при интерпретации в Windows-1252 - Ã ©. Когда вы импортируете свои данные в Excel, убедитесь, что вы указали кодировку UTF-8.
источник
Формат CSV реализован как ASCII, а не Unicode, в Excel, таким образом искажая диакритические знаки. У нас возникла та же проблема, и именно поэтому я обнаружил, что официальный стандарт CSV был определен как основанный на ASCII в Excel.
источник
Excel 2007 правильно читает UTF-8 с CSV в кодировке BOM (EF BB BF).
Excel 2003 (а может и раньше) читает UTF-16LE с спецификацией (FF FE), но с табуляцией вместо запятых или точек с запятой.
источник
Я могу только заставить CSV правильно анализировать в Excel 2007 как UTF-16 с прямым порядком байтов, разделенный табуляцией, начиная с правильной метки порядка байтов.
источник
Запись спецификации в выходной CSV-файл действительно работает для меня в Django:
Для получения дополнительной информации http://crashcoursing.blogspot.com/2011/05/exporting-csv-with-special-characters.html Спасибо, ребята!
источник
printWriter.print('\ufeff')
см. Также Как добавить спецификацию UTF-8 в Java .Другое решение, которое я нашел, было просто закодировать результат как кодовую страницу Windows 1252 (Windows-1252 или CP1252). Это можно сделать, например, установив
Content-Type
соответствующим образом что-то подобноеtext/csv; charset=Windows-1252
и аналогично установить кодировку символов потока ответа.источник
Обратите внимание, что включение спецификации UTF-8 не обязательно является хорошей идеей - версии Excel для Mac игнорируют ее и фактически отображают спецификацию как ASCII… три неприятных символа в начале первого поля в вашей электронной таблице…
источник
'\uFEFF' + myCsvString
и ожидалось, работает в Mac Excel 15.19.1 (2016).Проверьте кодировку, в которой вы генерируете файл, чтобы Excel правильно отображал файл, вы должны использовать системную кодовую страницу по умолчанию.
Какой язык вы используете? если это .Net, вам нужно только использовать Encoding.Default при создании файла.
источник
Если у вас есть устаревший код в vb.net, как у меня, следующий код работал для меня:
источник
Я нашел способ решить проблему. Это неприятный хак, но он работает: откройте документ с помощью Open Office , затем сохраните его в любом формате Excel; в результате
.xls
или.xlsx
будут отображаться подчеркнутые символы.источник
В Ruby 1.8.7 я кодирую каждое поле в UTF-16 и отбрасываю спецификацию (возможно).
Следующий код извлекается из active_scaffold_export:
Важная строка:
источник
откройте файл csv с помощью notepad ++, кликните на Encode, выберите конвертирование в UTF-8 (не конвертировать в UTF-8 (без спецификации)). Сохранение открыть двойным кликом с Excel. Надеемся, что это поможет Кристофу ГРИСОНУ.
источник