Какая кодировка правильно открывает файлы CSV в Excel на Mac и Windows? - PullRequest
127 голосов
/ 05 июля 2011

У нас есть веб-приложение, которое экспортирует файлы 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 не распознается как таковой. Разделитель полей - запятая, но точка с запятой ничего не меняет.

Существует ли какая-либо кодировка, которая работает в обоих мирах?

Ответы [ 15 ]

56 голосов
/ 25 ноября 2013

Кодировки Excel

Я считаю, что кодировка WINDOWS-1252 наименее расстраивает при работе с Excel.Так как в основном это собственный фирменный набор символов Microsoft, можно предположить, что он будет работать как на Mac, так и на версии MS-Excel для Windows.Обе версии по крайней мере включают в себя соответствующий селектор «Источник файла» или «Кодировка файла», который правильно считывает данные.

В зависимости от вашей системы и используемых вами инструментов, эта кодировка также может называться CP1252, ANSI, Windows (ANSI), MS-ANSI или просто Windows, среди прочих вариантов.

Это кодирование является расширенным набором ISO-8859-1 (он же LATIN1 и другие), поэтому вы можете вернуться к ISO-8859-1, если вы не можете использовать WINDOWS-1252 по какой-либо причине.Имейте в виду, что в ISO-8859-1 отсутствуют некоторые символы из WINDOWS-1252, как показано здесь:

| Char | ANSI | Unicode | ANSI Hex | Unicode Hex | HTML entity | Unicode Name                               | Unicode Range            |
| €    | 128  | 8364    | 0x80     | U+20AC      | €      | euro sign                                  | Currency Symbols         |
| ‚    | 130  | 8218    | 0x82     | U+201A      | ‚     | single low-9 quotation mark                | General Punctuation      |
| ƒ    | 131  | 402     | 0x83     | U+0192      | ƒ      | Latin small letter f with hook             | Latin Extended-B         |
| „    | 132  | 8222    | 0x84     | U+201E      | „     | double low-9 quotation mark                | General Punctuation      |
| …    | 133  | 8230    | 0x85     | U+2026      | …    | horizontal ellipsis                        | General Punctuation      |
| †    | 134  | 8224    | 0x86     | U+2020      | †    | dagger                                     | General Punctuation      |
| ‡    | 135  | 8225    | 0x87     | U+2021      | ‡    | double dagger                              | General Punctuation      |
| ˆ    | 136  | 710     | 0x88     | U+02C6      | ˆ      | modifier letter circumflex accent          | Spacing Modifier Letters |
| ‰    | 137  | 8240    | 0x89     | U+2030      | ‰    | per mille sign                             | General Punctuation      |
| Š    | 138  | 352     | 0x8A     | U+0160      | Š    | Latin capital letter S with caron          | Latin Extended-A         |
| ‹    | 139  | 8249    | 0x8B     | U+2039      | ‹    | single left-pointing angle quotation mark  | General Punctuation      |
| Œ    | 140  | 338     | 0x8C     | U+0152      | Œ     | Latin capital ligature OE                  | Latin Extended-A         |
| Ž    | 142  | 381     | 0x8E     | U+017D      |             | Latin capital letter Z with caron          | Latin Extended-A         |
| ‘    | 145  | 8216    | 0x91     | U+2018      | ‘     | left single quotation mark                 | General Punctuation      |
| ’    | 146  | 8217    | 0x92     | U+2019      | ’     | right single quotation mark                | General Punctuation      |
| “    | 147  | 8220    | 0x93     | U+201C      | “     | left double quotation mark                 | General Punctuation      |
| ”    | 148  | 8221    | 0x94     | U+201D      | ”     | right double quotation mark                | General Punctuation      |
| •    | 149  | 8226    | 0x95     | U+2022      | •      | bullet                                     | General Punctuation      |
| –    | 150  | 8211    | 0x96     | U+2013      | –     | en dash                                    | General Punctuation      |
| —    | 151  | 8212    | 0x97     | U+2014      | —     | em dash                                    | General Punctuation      |
| ˜    | 152  | 732     | 0x98     | U+02DC      | ˜     | small tilde                                | Spacing Modifier Letters |
| ™    | 153  | 8482    | 0x99     | U+2122      | ™     | trade mark sign                            | Letterlike Symbols       |
| š    | 154  | 353     | 0x9A     | U+0161      | š    | Latin small letter s with caron            | Latin Extended-A         |
| ›    | 155  | 8250    | 0x9B     | U+203A      | ›    | single right-pointing angle quotation mark | General Punctuation      |
| œ    | 156  | 339     | 0x9C     | U+0153      | œ     | Latin small ligature oe                    | Latin Extended-A         |
| ž    | 158  | 382     | 0x9E     | U+017E      |             | Latin small letter z with caron            | Latin Extended-A         |
| Ÿ    | 159  | 376     | 0x9F     | U+0178      | Ÿ      | Latin capital letter Y with diaeresis      | Latin Extended-A         |

Обратите внимание, что знак евро отсутствует .Эту таблицу можно найти по адресу Алан Вуд .

Преобразование

Преобразование выполняется по-разному для каждого инструмента и языка.Однако предположим, что у вас есть файл query_result.csv, который, как вы знаете, закодирован UTF-8.Преобразуйте его в WINDOWS-1252, используя iconv:

iconv -f UTF-8 -t WINDOWS-1252 query_result.csv > query_result-win.csv
25 голосов
/ 28 января 2012

Для UTF-16LE с спецификацией, если вы используете символы табуляции в качестве разделителей вместо запятых, Excel распознает поля.Причина, по которой он работает, заключается в том, что Excel фактически использует свой парсер Unicode * .txt.

Предупреждение : если файл отредактирован в Excel и сохранен, он будет сохранен как разделитель табуляции.ASCII.Теперь проблема в том, что при повторном открытии файла Excel предполагает, что он настоящий CSV (с запятыми), видит, что это не Unicode, поэтому анализирует его как разделенный запятыми - и, следовательно, создает его хэш!

Обновление : вышеупомянутое предостережение, по-видимому, не происходит для меня сегодня в Excel 2010 (Windows), по крайней мере, хотя, похоже, существует разница в поведении сохранения, если:

  • Вы редактируете и выходите из Excel (пытается сохранить как 'Unicode * .txt')

по сравнению с:

  • редактирование и закрытие только файл (работает как положено).
20 голосов
/ 31 января 2012

Недостаток: нет решения.Excel 2011 / Mac не может правильно интерпретировать CSV-файл, содержащий умляуты и диакритические знаки, независимо от того, какую кодировку или прыжковый переход вы делаете.Я был бы рад услышать, что кто-то сказал мне другое!

9 голосов
/ 13 марта 2015

Вы пробовали только CSV с разделителями-запятыми и точками с запятой. Если бы вы попробовали CSV с разделением табуляцией (также называемый TSV), вы бы нашли ответ:

UTF-16LE с BOM (метка порядка байтов), с разделением табуляцией


Но : В комментарии вы упоминаете, что TSV не вариант для вас (хотя я не смог найти это требование в вашем вопросе). Какая жалость. Это часто означает, что вы разрешаете ручное редактирование файлов TSV, что, вероятно, не очень хорошая идея. Визуальная проверка файлов TSV не является проблемой. Кроме того, редакторы могут быть настроены на отображение специального символа для отметки вкладок.

И да, я попробовал это на Windows и Mac.

4 голосов
/ 30 июня 2013

Лучший обходной путь для чтения файлов CSV с помощью UTF-8 на Mac - это преобразовать их в формат XLSX.Я нашел скрипт, созданный Конрадом Фёрстнером, который я немного улучшил, добавив поддержку различных символов-разделителей.

Загрузите скрипт с Github https://github.com/brablc/clit/blob/master/csv2xlsx.py. Для его запуска вам потребуетсяустановить модуль Python openpyxl для работы с файлами Excel: sudo easy_install openpyxl.

4 голосов
/ 18 февраля 2013

Вот ключевой момент при импорте CSV в кодировке utf8 в Excel 2011 для Mac: Microsoft говорит: «Excel для Mac в настоящее время не поддерживает UTF-8». Excel для Mac 2011 и UTF-8

ууууууууууууууууууууууууууууу, ах!

2 голосов
/ 30 декабря 2014

В Excel для Mac 2011 и Windows Excel 2002 сработало следующее:

  1. Используя iconv на Mac, преобразуйте файл в UTF-16 Little-Endian + назовите его *.txt (расширение .txt заставляет Excel запустить мастер импорта текста):

    iconv -f UTF-8 -t UTF-16LE filename.csv >filename_UTF-16LE.csv.txt

  2. Откройте файл в Excel и в мастере импорта текста выберите:

    • Шаг 1: Источник файла : игнорируйте его, не имеет значения, что вы выбираете
    • Шаг 2: выберите правильные значения для Разделители и Спецификатор текста
    • Шаг 3: при необходимости выберите форматы столбцов

PS UTF-16LE, созданный iconv, имеетBOM FEF байтов в начале.

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
* WindowsServer 2003 SP2
* Windows Excel 2002 v.10.2701.2625

2 голосов
/ 27 сентября 2014

В моем случае это сработало (Mac, Excel 2011, кириллические и латинские буквы с чешскими диакритическими знаками):

  • Charset UTF-16LE (просто UTF-16 было недостаточно)
  • Спецификация "\ xFF \ xFE"
  • \ t (табуляция) в качестве разделителя
  • Не забудьте также закодировать разделитель и CRLF: -)
  • Использовать iconv вместо mb_convert_encoding
2 голосов
/ 21 июня 2014

В моей Mac OS Text Wrangler идентифицировал файл CSV, созданный в Excel, как имеющий «западную» кодировку.

После некоторого поиска в Google я сделал этот небольшой скрипт (я не уверен в доступности Windows, возможно, с Cygwin ?):

$ cat /usr/local/bin/utf8.sh

#!/bin/bash

INPUTFILE="$1"

iconv -f macroman -c -t UTF-8 $INPUTFILE |tr '\r' '\n' >/tmp/file.$$.csv

mv $INPUTFILE ms_trash
mv /tmp/file.$$.csv $INPUTFILE
2 голосов
/ 02 апреля 2013

UTF-8 без спецификации в настоящее время работает для меня в Excel Mac 2011 14.3.2.

UTF-8 + вид работ, но спецификация отображается как бред.

UTF-16 работает, если вы импортируете файл и завершите работу мастера, но не если вы просто дважды щелкните по нему.

...