Какой кодировку использует Microsoft Excel при сохранении файлов? - PullRequest
60 голосов
/ 03 февраля 2009

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

Я бы догадался:

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

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

Ответы [ 10 ]

41 голосов
/ 01 октября 2009

Из памяти Excel использует машинную кодировку ANSI. Так что это будет Windows-1252 для установки EN-US, 1251 для русского и т. Д.

14 голосов
/ 18 мая 2010

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

ОБНОВЛЕНИЕ: Excel (включая Office 2013) фактически не учитывает веб-параметры, выбранные в диалоговом окне «Сохранить как ...», так что это какая-то ошибка. Сейчас я просто использую OpenOffice Calc, чтобы открыть свои файлы XLSX и экспортировать их как файлы CSV (отредактируйте настройки фильтра, выберите кодировку UTF-8).

5 голосов
/ 02 февраля 2017

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

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

4 голосов
/ 03 февраля 2009

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

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

2 голосов
/ 03 февраля 2009

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?)

0 голосов
/ 18 декабря 2018

Excel 2010 сохраняет файл UTF-16 / UCS-2 TSV , если выбрать File > Save As > Unicode Text (.txt). Это (принудительно) суффикс ".txt", который вы можете изменить на ".tsv".

Если вам нужен CSV, вы можете затем преобразовать файл TSV в текстовом редакторе, таком как Notepad ++, Ultra Edit, Crimson Editor и т. Д., Заменив вкладки точкой с запятой, запятыми и т.п. Обратите внимание, что, например, для чтения в таблицу БД часто TSV уже работает нормально (и часто легче читать вручную).

Если вам нужна другая кодовая страница, например UTF-8, используйте один из вышеупомянутых редакторов для преобразования.

0 голосов
/ 28 июня 2016

Вы можете использовать этот код 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
0 голосов
/ 15 июня 2012

Хотя это правда, что экспорт файла Excel, который содержит специальные символы, в CSV может быть проблемой в заднице, однако есть простой способ обойти: просто скопируйте / вставьте ячейки в документы Google, а затем сохраните оттуда.

0 голосов
/ 01 октября 2009

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

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

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

  1. Создайте электронную таблицу с символами более высокого порядка, например "Веспрем" в одной из камер;
  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 );
    }

}
0 голосов
/ 03 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...