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