Какую кодировку использует Microsoft Excel при сохранении файлов?
У меня есть Java-приложение, которое читает CSV-файлы, созданные в Excel (например, 2007). Кто-нибудь знает, какую кодировку MS Excel использует для сохранения этих файлов?
Я бы тоже догадался:
- windows-1255 (Cp1255)
- ISO-8859-1
- UTF8
но я не могу декодировать расширенные символы (например, французские акцентированные буквы), используя любой из этих типов кодировок.
9 ответов:
CSV файлы могут быть в любом формате, в зависимости от того, какой параметр кодирования был указан при экспорте из Excel: (сохранить диалоговое окно, кнопка инструменты, элемент веб-параметры, вкладка кодирование)
обновление: 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
простой способ подтвердить это будет:
- создайте электронную таблицу с символами более высокого порядка, например "Veszprém"в одной из ячеек;
- используйте свой любимый язык сценариев для анализа и декодирования электронной таблицы;
- посмотрите, что ваш скрипт производит, когда вы распечатываете декодированные данные.
пример скрипта 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, но само собой разумеется, что он будет использовать тот же формат...