У нас есть веб-приложение, которое экспортирует файлы CSV, содержащие иностранные символы, с UTF-8, без спецификации. Как пользователи Windows, так и Mac получают символы мусора в Excel. Я пытался конвертировать в UTF-8 с спецификацией; С Excel / Win все в порядке, Excel / Mac показывает бред. Я использую Excel 2003 / Win, Excel 2011 / Mac. Вот все кодировки, которые я пробовал:
Encoding BOM Win Mac
-------- --- ---------------------------- ------------
utf-8 -- scrambled scrambled
utf-8 BOM WORKS scrambled
utf-16 -- file not recognized file not recognized
utf-16 BOM file not recognized Chinese gibberish
utf-16LE -- file not recognized file not recognized
utf-16LE BOM characters OK, same as Win
row data all in first field
Лучшим является UTF-16LE с спецификацией, но CSV не распознается как таковой. Разделитель полей - запятая, но точка с запятой ничего не меняет.
Есть ли какая-либо кодировка, которая работает в обоих мирах?
mb_convert_encoding($str, "UTF-16LE");
в моем коде экспорта и выложу результаты здесь.Ответы:
Кодировки Excel
Я обнаружил, что
WINDOWS-1252
кодировка наименее расстраивает при работе с Excel. Так как в основном это собственный фирменный набор символов Microsoft, можно предположить, что он будет работать как на Mac, так и на Windows-версии MS-Excel. Обе версии по крайней мере включают в себя соответствующий селектор «Источник файла» или «Кодировка файла», который правильно считывает данные.В зависимости от вашей системы и инструментов , которые вы используете, эта кодировка также может быть названа
CP1252
,ANSI
,Windows (ANSI)
,MS-ANSI
или простоWindows
, среди других вариантов.Эта кодировка является надмножеством
ISO-8859-1
(иначеLATIN1
и другими), поэтому вы можете вернуться к ней,ISO-8859-1
еслиWINDOWS-1252
по какой-то причине вы не можете ее использовать . Имейте в виду, чтоISO-8859-1
некоторые символы отсутствуют,WINDOWS-1252
как показано здесь:Обратите внимание, что знак евро отсутствует . Эту таблицу можно найти в Alan Wood .
преобразование
Преобразование выполняется по-разному в каждом инструменте и языке. Однако предположим, что у вас есть файл,
query_result.csv
который, как вы знаете,UTF-8
закодирован. Преобразовать его вWINDOWS-1252
использованиеiconv
:источник
WINDOS-1252
, который, скорее всего, будет правильно интерпретирован как Mac, так и Windows Excel.Для UTF-16LE с спецификацией, если вы используете символы табуляции в качестве разделителей вместо запятых, Excel распознает поля. Причина, по которой он работает, заключается в том, что Excel фактически использует парсер Unicode * .txt.
Предупреждение : если файл отредактирован в Excel и сохранен, он будет сохранен как ASCII с разделителями табуляцией. Проблема теперь в том, что когда вы заново открываете файл, Excel предполагает, что он настоящий CSV (с запятыми), видит, что это не Unicode, поэтому анализирует его как разделенный запятыми - и, следовательно, создаст его хэш!
Обновление : вышеупомянутое предостережение, кажется, не происходит для меня сегодня в Excel 2010 (Windows), по крайней мере, хотя, кажется, есть разница в поведении сохранения, если:
по сравнению с:
источник
sep=,
и кодировка UTF16LE работали для меня и не требовали другого символа-разделителя (он оставался запятой). Открытие файла двойным щелчком мыши загрузило файл правильно, со специальными символами и разрывами строк в ячейках без изменений. Недостаток:sep=,
насколько я видел, заголовок не распознается ни одной программой, кроме Excel. Но OpenOffice / LibreOffice в любом случае не требует этого взлома (разрывы строк в содержимом ячеек работают очень хорошо, тогда как загрузка из текстового файла / использование текста в помощник по столбцам в Excel неправильно обрабатывает разрывы строк в ячейках).Недостаток: нет решения. Excel 2011 / Mac не может правильно интерпретировать CSV-файл, содержащий умляуты и диакритические знаки, независимо от того, какую кодировку или переходы по кругу вы делаете. Я был бы рад услышать, что кто-то говорит мне другое!
источник
Вы пробовали только CSV с разделителями-запятыми и точками с запятой. Если бы вы попробовали CSV с разделением табуляцией (также называемый TSV), вы бы нашли ответ:
UTF-16LE с спецификацией (метка порядка байтов), разделенная табуляцией
Но : в комментарии вы упоминаете, что TSV не подходит для вас (хотя я не смог найти это требование в вашем вопросе). Какая жалость. Это часто означает, что вы разрешаете ручное редактирование файлов TSV, что, вероятно, не очень хорошая идея. Визуальная проверка файлов TSV не является проблемой. Кроме того, редакторы могут быть настроены на отображение специального символа для отметки вкладок.
И да, я попробовал это на Windows и Mac.
источник
Вот решающий момент при импорте CSV в кодировке utf8 в Excel 2011 для Mac: Microsoft говорит: «Excel для Mac в настоящее время не поддерживает UTF-8». Excel для Mac 2011 и UTF-8
Yay, способ пойти MS!
источник
Лучший обходной путь для чтения файлов CSV с UTF-8 на Mac - это преобразовать их в формат XLSX. Я нашел скрипт, созданный Конрадом Фёрстнером, который я немного улучшил, добавив поддержку различных символов-разделителей.
Загрузите скрипт с Github https://github.com/brablc/clit/blob/master/csv2xlsx.py . Для того , чтобы запустить его вам нужно будет установить модуль питона openpyxl для обработки файлов Excel:
sudo easy_install openpyxl
.источник
В моем случае это сработало (Mac, Excel 2011, кириллические и латинские буквы с чешскими диакритическими знаками):
источник
В моем случае кажется, что Excel 2011 для Mac OS не использует Encoding.GetEncoding («10000»), как я думал, и потратил 2 дня впустую, но с той же iso, что и в ОС Microsoft. Лучшим доказательством этого является создание файла в Excel 2011 для MAC со специальными символами, сохранение его как CSV, а затем открытие его в текстовом редакторе MAC, и символы шифруются.
Для меня этот подход сработал - это означает, что экспорт csv в Excel 2011 на MAC OS имеет специальные западноевропейские символы:
источник
UTF-8 без спецификации в настоящее время работает для меня в Excel Mac 2011 14.3.2.
UTF-8 + BOM вроде работает, но BOM визуализируется как бред.
UTF-16 работает, если вы импортируете файл и завершите работу мастера, но не если вы просто дважды щелкните по нему.
источник
В Excel для Mac 2011 и Windows Excel 2002 работали следующие функции:
Используя iconv на Mac, преобразуйте файл в UTF-16 Little-Endian + назовите его * .txt (расширение .txt заставляет Excel запустить мастер импорта текста):
iconv -f UTF-8 -t UTF-16LE filename.csv >filename_UTF-16LE.csv.txt
Откройте файл в Excel и в мастере импорта текста выберите:
PS UTF-16LE, созданный iconv, имеет в начале байты спецификации FF FE.
PPS Мой оригинальный CSV-файл был создан на компьютере под управлением Windows 7 в формате UTF-8 (с байтами BOM EF BB BF в начале) и использовал разрывы строк CRLF. Запятая использовалась как разделитель полей, а одинарная кавычка - как текстовый классификатор. Он содержал буквы ASCII, а также различные латинские буквы с тильдами, умлаутом и т. Д., Плюс немного кириллицы. Все отображается правильно в Excel для Win и Mac.
PPPS Точные версии программного обеспечения:
* Mac OS X 10.6.8
* Excel для Mac 2011 v.14.1.3
* Windows Server 2003 SP2
* Windows Excel 2002 v.10.2701.2625
источник
На моей Mac OS Text Wrangler определил файл CSV, созданный в Excel, как имеющий «западную» кодировку.
После некоторого поиска в Google я сделал этот небольшой скрипт (я не уверен в доступности Windows, может быть, с Cygwin ?):
$ cat /usr/local/bin/utf8.sh
источник
В моем случае добавление преамбулы к файлу решило мою проблему:
источник
вместо csv попробуйте вывести html с расширением XLS и mime-типом «application / excel». Я знаю, что это будет работать в Windows, но не могу говорить за MacOS
источник
br
тег), Excel для Mac игнорирует (работает с Windows) CSSmso-data-placement:same-cell;
Это работает для меня
Теперь ключевой момент, выберите MacIntosh в качестве источника файла (это должен быть первый выбор).
Это использует Excel 2011 (версия 14.4.2)
* В нижней части окна есть маленький выпадающий список
источник
Решите это, используя Java (UTF-16LE с спецификацией):
Обратите внимание, что файл CSV следует использовать в
TAB
качестве разделителя. Вы можете прочитать файл CSV как в Windows, так и в MAC OS X.Обратитесь к разделу: Как мне кодировать / декодировать байтовые массивы UTF-16LE с помощью спецификации?
источник