У меня есть очень простая вещь, которая просто выводит некоторые вещи в формате CSV, но это должен быть UTF-8. Я открываю этот файл в TextEdit или TextMate или Dreamweaver, и он правильно отображает символы UTF-8, но если я открываю его в Excel, он делает это глупо - вместо этого. Вот что у меня есть во главе моего документа:
header("content-type:application/csv;charset=UTF-8");
header("Content-Disposition:attachment;filename=\"CHS.csv\"");
Кажется, что все это имеет желаемый эффект, за исключением того, что Excel (Mac, 2008) не хочет импортировать его должным образом. В Excel нет вариантов "открыть как UTF-8" или что-то в этом роде, так что ... я немного раздражен.
Кажется, я нигде не могу найти чёткого решения, несмотря на то, что у многих людей такая же проблема. Больше всего я вижу включение спецификации, но я не могу точно понять, как это сделать. Как вы можете видеть выше, я просто использую echo
эти данные, я не пишу никаких файлов. Я могу сделать это, если мне нужно, просто нет, потому что на данный момент в этом нет необходимости. Любая помощь?
Обновление: я попытался повторить спецификацию, echo pack("CCC", 0xef, 0xbb, 0xbf);
которую я только что извлек с сайта, который пытался обнаружить спецификацию. Но Excel просто добавляет эти три символа в самую первую ячейку при импорте и все еще портит специальные символы.
источник
Ответы:
По словам инженера службы поддержки Microsoft ,
Обновление, 2017 : Это относится ко всем версиям Microsoft Excel для Mac до Office 2016 . Более новые версии (из Office 365) теперь поддерживают UTF-8.
Чтобы вывести содержимое UTF-8, которое Excel сможет успешно читать как в Windows, так и в OS X, вам нужно сделать две вещи:
Убедитесь, что вы конвертировали текст UTF-8 CSV в UTF-16LE
Убедитесь, что вы добавили метку порядка байтов UTF-16LE в начало файла
Следующая проблема, которая появляется только в Excel в OS X (но не в Windows), заключается в том, что при просмотре CSV-файла со значениями, разделенными запятыми, Excel будет отображать строки только с одной строкой и весь текст вместе с запятыми в первой строке.
Чтобы избежать этого, используйте вкладки в качестве отдельного значения.
Я использовал эту функцию из комментариев PHP (используя вкладки "\ t" вместо запятых), и она отлично работала на OS X и Windows Excel.
Обратите внимание, что для решения проблемы с пустым столбцом в качестве конца строки мне нужно было изменить строку кода, которая гласит:
в
Как отмечают некоторые другие комментарии на этой странице, другие приложения для работы с электронными таблицами, такие как OpenOffice Calc, собственные номера Apple и электронная таблица Google Doc, не имеют проблем с файлами UTF-8 с запятыми.
Смотрите таблицу в этом вопросе о том, что работает и не работает для файлов Unicode CSV в Excel
В качестве дополнительного примечания я мог бы добавить, что если вы используете Composer , вы должны взглянуть на добавление
League\Csv
к своим требованиям.League\Csv
имеет действительно хороший API для создания CSV-файлов .Чтобы использовать
League\Csv
этот метод создания файлов CSV, посмотрите этот примеристочник
sep=;
илиsep=,
в файл CSV говорит Excel, как отделить CSV и столбцы будут созданы снова правильно."sep=,\n"
, а затем в другой строке добавил данные. Все было хорошо, если бы я делал все это в одну строку ($csv = chr(255) . chr(254) /* BOM */ . "sep=,\n" . mb_convert_encoding($csv, 'UTF-16LE', 'UTF-8');
). Теперь все выглядит отлично на Mac. У меня нет Windows для тестирования.У меня такая же (или похожая) проблема.
В моем случае, если я добавлю спецификацию к выводу, она будет работать:
Я считаю, что это довольно уродливый хак, но он работал для меня, по крайней мере, для Excel 2007 Windows. Не уверен, что это будет работать на Mac.
источник
Вот как я это сделал (чтобы побудить браузер загрузить файл csv):
Единственное, что исправило проблему с кодировкой UTF8 в предварительном просмотре CSV, когда вы нажимаете пробел на Mac ... но не в Excel Mac 2008 ... не знаю почему
источник
$outstream = fopen( "php://output", 'w' ); fputs( $outstream, "\xEF\xBB\xBF" ); foreach ( $export as $fields ) { fputcsv( $outstream, $fields ); } fclose( $outstream );
))
.Я просто имел дело с той же проблемой и придумал два решения.
Используйте класс PHPExcel в соответствии с предложением bpeterson76 .
Вот метод PHP, который берет некоторые данные TSV и выводит файл Excel в браузер, обратите внимание, что он использует Writer Excel5, что означает, что файл должен быть совместим с более старыми версиями Excel, но у меня больше нет доступа к ним, поэтому я не могу их проверить.
Из-за проблем с эффективностью PHPExcel мне также пришлось выяснить, как создать файл CSV или TSV, совместимый с UTF-8 и Excel.
Вот код PHP, который я использовал, обратите внимание, что я использую данные TSV (табуляции в качестве разделителей вместо запятых):
источник
У меня была та же проблема, и она была решена, как показано ниже:
источник
Excel не поддерживает UTF-8. Вы должны закодировать свой текст UTF-8 в UCS-2LE.
источник
В моем случае следующее очень хорошо работает, чтобы CSV-файл с символами UTF-8 правильно отображался в Excel.
0xEF 0xBB 0xBF
Заголовок BOM позволит Excel знать правильную кодировку.источник
fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF));
<- это именно то, что мне было нужно. Работает как часы.Чтобы следить за этим:
Похоже, что проблема просто с Excel на Mac. Это не то, как я генерирую файлы, потому что даже создание CSV из Excel нарушает их. Я сохраняю как CSV, и повторно импортирую, и все символы перепутаны.
Так что ... кажется, нет правильного ответа на это. Спасибо за все предложения.
Я бы сказал, что из всего, что я прочитал, предложение @Daniel Magliola о спецификации, вероятно, будет лучшим ответом для какого-либо другого компьютера. Но это все еще не решает мою проблему.
источник
Это отлично работает в Excel как для Windows, так и для Mac OS.
Исправлены проблемы в Excel, которые не отображают символы, содержащие диакритические знаки, буквы кириллицы, греческие буквы и символы валюты.
источник
Файл CSV должен содержать метку порядка байтов.
Или, как предложено, и просто обойти его с помощью HTTP-тела
источник
Добавить:
Или:
Перед записью любого контента в файл CSV.
Пример:
источник
Поскольку кодировка UTF8 не очень хорошо работает с Excel. Вы можете преобразовать данные в другой тип кодирования, используя
iconv()
.например
источник
Преобразование уже зашифрованного текста utf-8 с использованием
mb_convert_encoding
не требуется. Просто добавьте три символа перед исходным контентом:Для меня это решило проблему специальных символов в CSV-файлах.
источник
fputs
.Когда я исследовал и обнаружил, что UTF-8 не работает хорошо на MAC и Windows, поэтому я попробовал с Windows-1252, он хорошо поддерживает их обоих, но вы должны выбрать тип кодировки в Ubuntu. Вот мой код
$valueToWrite = mb_convert_encoding($value, 'Windows-1252');
источник
источник
Как насчет вывода на сам Excel? Это отличный класс, который позволяет создавать файлы XLS на стороне сервера. Я часто использую его для клиентов, которые не могут «выяснить» CSV и до сих пор никогда не жаловались. Он также допускает дополнительное форматирование (затенение, высоту строк, вычисления и т. Д.), Которое csv никогда не будет делать.
источник
Вы можете конвертировать вашу строку CSV с помощью iconv . например:
источник
Вы должны использовать кодировку «Windows-1252».
Может быть, вы должны преобразовать свои строки:
источник
Вы можете добавить 3 байта в файл перед экспортом, это работает для меня. До этого система работала только в Windows и HP -UX, но не работала в Linux.
Иметь UTF-8 BOM (3 байта, шестнадцатеричный EF BB BF) в начале файла. В противном случае Excel будет интерпретировать данные в соответствии с кодировкой по умолчанию для вашей локали (например, cp1252) вместо utf-8.
Генерация CSV-файла для Excel, как создать новую строку внутри значения
источник
Я на Mac, в моем случае мне просто нужно было указать разделитель
"sep=;\n"
и кодировать файл в UTF-16LE следующим образом:источник
Для меня ни одно из вышеприведенных решений не сработало. Вот что я сделал, чтобы решить проблему: измените значение с помощью этой функции в коде PHP:
Эти выходные данные правильно отображаются в листе Excel.
источник
У меня была такая же проблема, когда у меня была подпрограмма Excel VBA, которая импортировала данные. Поскольку CSV - это простой текстовый формат, я работал над этим, программно открывая данные в простом файловом редакторе, таком как WordPad, и снова сохраняя их как текст в формате Unicode, или копируя их в буфер обмена и вставляя их в Excel. Если Excel автоматически не анализирует CSV в ячейки, это легко исправить с помощью встроенной функции «Текст в столбцы».
источник
Проблема все еще возникает, когда вы сохраняете его как файл .txt и открываете его в Excel с запятой в качестве разделителя?
Проблема может заключаться не в кодировке, а в том, что файл не является идеальным CSV в соответствии со стандартами Excel.
источник
Это сообщение довольно старое, но после нескольких часов попыток я хочу поделиться своим решением ... может быть, оно помогает кому-то, имеющему дело с Excel, Mac и CSV, и натыкается на эту угрозу. Я генерирую CSV динамически, как вывод из базы данных с учетом пользователей Excel. (UTF-8 с спецификацией)
Я пробовал много иконок, но не смог заставить работать немецкие умлауты в Mac Excel 2004. Одно из решений: PHPExcel. Это здорово, но для моего проекта это слишком много. Для меня работает создание файла csv и преобразование этого файла csv в xls с помощью этого PHPsnippet: csv2xls . результат xls работает с превосходными немецкими умлаутами (ä, ö, Ü, ...).
источник
Я только что попробовал эти заголовки и получил Excel 2013 на ПК с Windows 7, чтобы правильно импортировать файл CSV со специальными символами. Byte Order Mark (BOM) был последним ключом, который заставил его работать.
источник
В противном случае вы можете:
источник
ЛЕГКОЕ решение для Mac Excel 2008: я боролся с этим много раз, но вот мое простое решение: откройте файл .csv в Textwrangler, который должен правильно открыть ваши символы UTF-8. Теперь в нижней строке состояния измените формат файла с «Unicode (UTF-8)» на «Western (ISO Latin 1)» и сохраните файл. Теперь перейдите в Mac Excel 2008 и выберите «Файл»> «Импорт»> «Выбрать CSV»> «Найти свой файл»> в поле «Источник файла» выберите «Windows (ANSI)» и вуаля, символы UTF-8 будут отображаться правильно. По крайней мере, это для меня ...
источник
Я использую это, и это работает
источник
#output UTF-8 CSV в PHP, который Excel будет читать правильно.
источник
источник