Какую кодировку использует Microsoft Excel при сохранении файлов?

У меня есть приложение Java, которое читает CSV-файлы, созданные в Excel (например, 2007). Кто-нибудь знает, какую кодировку MS Excel использует для сохранения этих файлов?

Я бы тоже догадался:

  • windows-1255 (Cp1255)
  • ISO-8859-1
  • utf8 в

но я не могу декодировать расширенные символы (например, французские акцентированные буквы), используя любой из этих типов кодировок.

9 ответов


CSV-файлы могут быть в любом формате, в зависимости от того, какая опция кодирования была указана при экспорте из Excel: (диалог сохранения, кнопка "сервис", элемент "веб-параметры", вкладка "кодировка")

UPDATE: Excel (включая Office 2013) фактически не уважает веб-параметры, выбранные в "сохранить как...- диалог, значит, это какая-то ошибка. Я просто использую OpenOffice Calc, чтобы открыть мои XLSX-файлы и экспортировать их в CSV-файлы (изменить настройки фильтра, выбрать кодировку UTF-8).


из памяти Excel использует машинную кодировку ANSI. Таким образом, это будет Windows-1252 для установки в США, 1251 для русского языка и т. д.


У меня была аналогичная проблема на прошлой неделе. Я получил несколько CSV-файлов с различными кодировками. Перед импортом в базу данных я использовал chardet libary автоматически вынюхивать правильную кодировку.

Chardet-это порт от Mozillas character detection engine, и если размер выборки достаточно велик (один акцентированный символ не будет делать), работает очень хорошо.


пробуждение этой старой нити... Мы сейчас в 2017 году. И все же Excel не может сохранить простую электронную таблицу в формате CSV при сохранении исходной кодировки ... Просто удивительно.

к счастью, Google Docs живет в правильном веке. Решение для меня - просто открыть электронную таблицу с помощью Google Docs, чем загрузить ее обратно в CSV. Результатом является правильно закодированный CSV-файл (со всеми строками, закодированными в UTF8).


Russian Edition предложения CSV, CSV (Macintosh) и CSV (DOS).

при сохранении в plain CSV, он использует windows-1251.

я просто пытался сохранить французское слово Résumé вместе с русским текстом он сохранил его в HEX как 52 3F 73 75 6D 3F, 3F являясь ASCII код question mark.

когда я открыл CSV файл, слово, конечно, стало нечитаемым (R?sum?)


вы можете использовать эту Visual Studio VB.Net код для получения кодировки:

Dim strEncryptionType As String = String.Empty
Dim myStreamRdr As System.IO.StreamReader = New System.IO.StreamReader(myFileName, True)
Dim myString As String = myStreamRdr.ReadToEnd()
strEncryptionType = myStreamRdr.CurrentEncoding.EncodingName

cp1250 широко используется в документах Microsoft Office, включая Word и Excel 2003.

http://en.wikipedia.org/wiki/Windows-1250

простой способ подтвердить это было бы:

  1. создайте таблицу с символами более высокого порядка, например "Veszprém"в одной из ячеек;
  2. используйте свой любимый язык сценариев для разбора и декодирования электронной таблицы;
  3. посмотрите, что ваш скрипт производит, когда распечатайте декодированные данные.

пример скрипта perl:

#!perl

use strict;

use Spreadsheet::ParseExcel::Simple;
use Encode qw( decode );

my $file    = "my_spreadsheet.xls";

my $xls     = Spreadsheet::ParseExcel::Simple->read( $file );
my $sheet   = [ $xls->sheets ]->[0];

while ($sheet->has_data) {

    my @data = $sheet->next_row;

    for my $datum ( @data ) {
        print decode( 'cp1250', $datum );
    }

}

хотя верно, что экспорт файла excel, содержащего специальные символы в csv, может быть болью в заднице, однако есть простая работа: просто скопируйте/вставьте ячейки в документы google, а затем сохраните оттуда.


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