Microsoft Excel искажает Диакритические знаки в .csv файлах?

184
задан bandrade 3 March 2016 в 03:53
поделиться

12 ответов

Правильно форматированный файл UTF8 может иметь порядок байтов Mark как его первые три октета. Это шестнадцатеричные значения 0xEF, 0xBB, 0xBF. Эти октеты служат для маркировки файла как UTF8 (так как они не релевантны как информация "о порядке байтов"). 1 , Если этот BOM не существует, потребителя/читателя оставляют вывести тип кодировки текста. Читатели, которые не являются UTF8 способный, считают байты как некоторое другое кодирование, такие как Windows 1252 и отобразят символы  в начале файла.

существует известная ошибка, где Excel, на открытие UTF8 CSV files через ассоциацию файлов, предполагает, что они находятся в однобайтовом кодировании, игнорирование присутствие UTF8 BOM. Это может не быть зафиксированным любой системной кодовой страницей по умолчанию или установкой языка. BOM не будет подсказка в Excel - это просто не будет работать. (Отчет меньшинства утверждает, что BOM иногда инициировал "текстовый мастер" Импорта.) Эта ошибка, кажется, существует в Excel 2003 и ранее. В большинстве сообщений (среди ответов здесь) говорится, что это фиксируется в Excel 2007 и более новое.

Примечание, что Вы можете всегда* правильно, открывает UTF8 CSV files in Excel с помощью "текстового мастера" Импорта, который позволяет Вам определять кодирование файла, который Вы открываете. Конечно, это намного менее удобно.

Читатели этого ответа наиболее вероятны в ситуации, где они особенно не поддерживают Excel < 2007, но отправляют необработанный текст UTF8 в Excel, который неправильно истолковывает его и опрыскивает Ваш текст Ã и другие подобные символы Windows 1252. Добавление UTF8 BOM является, вероятно, Вашей лучшей и самой быстрой фиксацией.

, Если Вы застреваете с пользователями на более старом, Выделяется, и Excel является единственным потребителем Вашего CSVs, можно работать вокруг этого путем экспорта UTF16 вместо UTF8. Excel 2000 и 2003 будет открытый для двойного щелчка они правильно. (Некоторые другие текстовые редакторы могут иметь проблемы с UTF16, таким образом, Вам, вероятно, придется взвесить Ваши опции тщательно.)

<час>

* Кроме тех случаев, когда Вы не можете, (по крайней мере), Excel 2011 для Мастера Импорта Mac на самом деле всегда не работает со всей кодировкой, независимо от того, что Вы говорите ему. </anecdotal-evidence>:)

234
ответ дан Florent Paillot 23 November 2019 в 05:57
поделиться

выберите UTF-8 enconding при импорте. при использовании Office 2007, это - то, где Вы выбрали его: прямо после открытия файла.

10
ответ дан Glorfindel 23 November 2019 в 05:57
поделиться

Как Fregal сказанный \uFEFF является способом пойти.

<%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%>
<%
Response.Clear();
Response.ContentType = "text/csv";
Response.Charset = "utf-8";
Response.AddHeader("Content-Disposition", "attachment; filename=excelTest.csv");
Response.Write("\uFEFF");
// csv text here
%>
4
ответ дан Kristof Neirynck 23 November 2019 в 05:57
поделиться

Предварительно ожидая BOM (\uFEFF) работал на меня (Excel 2007), в том, что Excel распознал файл как UTF-8. Иначе сохранение его и использование работ мастера импорта, но менее идеальны.

38
ответ дан 23 November 2019 в 05:57
поделиться

Это только имеет вопрос кодировок символов. Похоже на экспорт данных как UTF-8: Г© в UTF-8 является двухбайтовым 0xC3 0xA9 последовательности, который, когда интерпретируется в Windows 1252 является ГѓВ©. При импорте данных в Excel удостоверьтесь, что сказали ему, что кодировка символов, которую Вы используете, является UTF-8.

1
ответ дан Adam Rosenfield 23 November 2019 в 05:57
поделиться

Вы можете сохранить html-файл с расширением 'xls', и акценты будут работать (по крайней мере, до 2007 года).

Пример: сохраните это (используя Сохранить как utf8 в Блокноте) в качестве теста .xls:

<html>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
<table>
<tr>
  <th>id</th>
  <th>name</th>
</tr>
<tr>
 <td>4</td>
 <td>Hélène</td>
</tr>
</table>
</html>
2
ответ дан 23 November 2019 в 05:57
поделиться

Я также заметил, что некоторое время назад на этот вопрос был дан ответ, но я не понимаю историй, в которых говорится, что невозможно открыть файл CSV с кодировкой utf8 в Excel без с помощью мастера текста.

Мой воспроизводимый опыт: Введите У старого Макдональда была ферма, ÈÌÉÍØ , в Блокноте нажмите Enter, затем «Сохранить как» (используя параметр UTF-8).

Использование Python, чтобы показать, что на самом деле там находится:

>>> open('oldmac.csv', 'rb').read()
'\xef\xbb\xbfOld MacDonald had a farm,\xc3\x88\xc3\x8c\xc3\x89\xc3\x8d\xc3\x98\r\n'
>>> ^Z

Хорошо. Блокнот разместил спецификацию спереди.

Теперь войдите в проводник Windows, дважды щелкните имя файла или щелкните правой кнопкой мыши и используйте «Открыть с помощью ...», и появится всплывающее окно Excel (2003) с отображением, как ожидалось.

2
ответ дан 23 November 2019 в 05:57
поделиться

Ниже приведен PHP-код, который я использую в своем проекте при отправке Microsoft Excel пользователю:

  /**
   * Export an array as downladable Excel CSV
   * @param array   $header
   * @param array   $data
   * @param string  $filename
   */
  function toCSV($header, $data, $filename) {
    $sep  = "\t";
    $eol  = "\n";
    $csv  =  count($header) ? '"'. implode('"'.$sep.'"', $header).'"'.$eol : '';
    foreach($data as $line) {
      $csv .= '"'. implode('"'.$sep.'"', $line).'"'.$eol;
    }
    $encoded_csv = mb_convert_encoding($csv, 'UTF-16LE', 'UTF-8');
    header('Content-Description: File Transfer');
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment; filename="'.$filename.'.csv"');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: '. strlen($encoded_csv));
    echo chr(255) . chr(254) . $encoded_csv;
    exit;
  }

ОБНОВЛЕНО: Улучшение имени файла и исправление ОШИБКИ правильного расчета длины. Благодаря TRiG и @ ivanhoe011

30
ответ дан 23 November 2019 в 05:57
поделиться

Формат CSV реализован как ASCII, не unicode, в Excel, таким образом исказив диакритические знаки. Мы испытали ту же проблему, которая является, как я разыскал это, официальный стандарт CSV был определен как являющийся основанным на ASCII в Excel.

1
ответ дан Jeff Yates 23 November 2019 в 05:57
поделиться

Проверьте кодирование, в котором Вы генерируете файл, чтобы заставить Excel отобразить файл правильно необходимо использовать системную кодовую страницу по умолчанию.

язык Wich Вы используете? если это-.Net, только необходимо использовать Кодирование. Значение по умолчанию при генерации файла.

0
ответ дан albertein 23 November 2019 в 05:57
поделиться

Excel 2007 правильно читает UTF-8 с спецификацией (EF BB BF), закодированной csv.

Excel 2003 (и, возможно, ранее) читает UTF-16LE с спецификацией (FF FE), но с Вкладки вместо запятых или точек с запятой.

1
ответ дан 23 November 2019 в 05:57
поделиться

Я могу заставить CSV правильно анализировать в Excel 2007 только как UTF-16 с прямым порядком байтов, разделенных табуляцией, начиная с правильной метки порядка байтов.

1
ответ дан 23 November 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: