Какую кодировку использует Microsoft Excel при сохранении файлов?
У меня есть приложение Java, которое читает CSV файлы, созданные в Excel (например, 2007). Кто-нибудь знает, какую кодировку использует MS Excel для сохранения этих файлов?
Я бы тоже догадался:
- windows-1255 (Cp1255)
- ISO-8859-1
- UTF8
но я не могу декодировать расширенные символы (например, французские подчеркнутые буквы), используя любой из этих типов кодировок.
Ответы
Ответ 1
Файлы CSV могут быть в любом формате, в зависимости от того, какой параметр кодировки был указан во время экспорта из Excel: (Сохранить диалог, кнопку "Инструменты", "Параметры веб-параметров", вкладка "Кодировка" )
ОБНОВЛЕНИЕ: Excel (включая Office 2013) на самом деле не уважает веб-параметры, выбранные в диалоговом окне "Сохранить как...", так что это некоторая ошибка. Я просто использую OpenOffice Calc, чтобы открыть мои файлы XLSX и экспортировать их в виде файлов CSV (изменить настройки фильтра, выбрать кодировку UTF-8).
Ответ 2
Из памяти Excel использует кодировку ANSI для конкретного компьютера. Так что это будет Windows-1252 для установки EN-US, 1251 для русского и т.д.
Ответ 3
У меня была похожая проблема на прошлой неделе. Я получил несколько файлов CSV с различными кодировками. Перед импортом в базу данных я использовал библиотеку chardet, чтобы автоматически определить правильную кодировку.
Chardet - это порт из движка обнаружения персонажей Mozillas, и если размер выборки достаточно велик (один подчеркнутый символ не подойдет), то он действительно работает хорошо.
Ответ 4
Пробуждение этого старого потока... Мы сейчас в 2017 году. И все же Excel не может сохранить простую таблицу в формате CSV, сохранив исходную кодировку... Просто потрясающе.
К счастью, Google Docs живет в правильном веке. Решение для меня - это просто открыть таблицу с помощью Документов Google, а не загружать ее обратно в CSV. Результатом является правильно закодированный CSV файл (со всеми строками, закодированными в UTF8).
Ответ 5
Russian Edition
предлагает CSV
, CSV (Macintosh)
и CSV (DOS)
.
При сохранении в обычном CSV
он использует windows-1251
.
Я просто попытался сохранить французское слово Résumé
вместе с русским текстом, он сохранил его в HEX
, как 52 3F 73 75 6D 3F
, 3F
, являющийся кодом ASCII
для question mark
.
Когда я открыл файл CSV
, слово, конечно, стало нечитаемым (R?sum?
)
Ответ 6
Вы можете использовать этот код Visual 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
Ответ 7
Excel 2010 сохраняет файл TSV UTF-16/UCS-2, если выбрать " File > Save As > Unicode Text (.txt)
. Это (принудительно) суффикс ".txt", который вы можете изменить на ".tsv".
Если вам нужен CSV, вы можете затем конвертировать файл TSV в текстовом редакторе, таком как Notepad++, Ultra Edit, Crimson Editor и т.д., Заменяя вкладки точкой с запятой, запятыми или тому подобным. Обратите внимание, что, например, для чтения в таблицу БД, часто TSV уже работает нормально (и часто легче читать вручную).
Если вам нужна другая кодовая страница, такая как UTF-8, используйте один из вышеупомянутых редакторов для конвертации.
Ответ 8
cp1250 широко используется в документах Microsoft Office, включая Word и Excel 2003.
http://en.wikipedia.org/wiki/Windows-1250
Простым способом подтвердить это будет:
- Создайте электронную таблицу с символами более высокого порядка, например. "Веспрем" в одной из ячеек;
- Используйте свой любимый язык сценариев для анализа и декодирования электронной таблицы;
- Посмотрите, что делает ваш script при печати декодированных данных.
Пример perl script:
#!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 );
}
}
Ответ 9
Хотя верно, что экспорт файла excel, который содержит специальные символы в csv, может быть болью в заднице, однако существует простая работа: просто скопируйте/вставьте ячейки в документы Google, а затем сохраните их.
Ответ 10
Файлы OOXML, подобные файлам Excel 2007, закодированы в UTF-8, согласно wikipedia. Я не знаю о CSV файлах, но, разумеется, он будет использовать тот же формат...