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


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

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

  • windows-1255 (Cp1255)
  • ISO-8859-1
  • UTF8

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

9 56

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

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

  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, но само собой разумеется, что он будет использовать тот же формат...