Excel в CSV с кодировкой UTF8
У меня есть файл Excel, в котором есть некоторые испанские символы (тильды и т. Д.), Которые мне нужно преобразовать в файл CSV для использования в качестве файла импорта. Однако, когда я делаю Save As CSV, он управляет «специальными» испанскими символами, которые не являются символами ASCII. Это также похоже на левые и правые кавычки и длинные тире, которые, как представляется, исходят от исходного пользователя, создающего файл Excel в Mac.
Поскольку CSV – это просто текстовый файл, я уверен, что он может обрабатывать кодировку UTF8, поэтому я предполагаю, что это ограничение Excel, но я ищу способ получить из Excel в CSV и сохранить символы, отличные от ASCII неповрежденными.
- Проблемы с кодировкой для файла CSV UTF8 при открытии Excel и TextEdit
- Файл Excel с табуляцией (.txt) со специальным символом
- PHP. Преобразование таблицы HTML в CSV добавляет пустые строки.
- Действие Web API возвращает FileContentResult, который, если он сохранен как .csv, будет отображаться как тарабарщина, а если в качестве .txt - это нормально. Зачем?
- Как указать кодировку в .NET Interop.Excel.Workbooks.OpenText
- Политонический грек в XML: это не юникод, но что это?
- Проблема с кодировкой UTF- / csv для excel
- как работает mb_convert_encoding?
- Есть ли какой-либо путь через java-программу, я могу сказать Excel открыть файл csv в utf8?
- Python pandas to_excel 'utf8' кодек не может декодировать байт
- Проблема кодирования UTF-8 из 2 столбцов в книге Excel
- Как разбирать символы UTF-8 в файлах Excel с помощью POI
- Каков наилучший способ экспорта данных UTF8 в Excel?
Простым обходным путем является использование Google Spreadsheet. Вставить (значения, только если у вас сложные формулы) или импортировать лист, а затем загрузить CSV. Я просто попробовал несколько персонажей, и он работает довольно хорошо.
ПРИМЕЧАНИЕ. В Google Таблицах есть ограничения при импорте. См. Здесь .
ПРИМЕЧАНИЕ. Будьте осторожны с конфиденциальными данными с помощью Google Таблиц.
EDIT: Еще одна альтернатива – в основном они используют макрос VB или дополнения, чтобы заставить сохранять как UTF8. Я не пробовал ни одно из этих решений, но они звучат разумно.
Я нашел приложение OpenSffice для работы с электронными таблицами, Calc, действительно хорошо справляется с данными CSV.
В диалоговом окне «Сохранить как …» нажмите «Параметры форматирования», чтобы получить разные кодировки для CSV. LibreOffice работает аналогично AFAIK.
-
Сохраните лист Excel как «Unicode Text (.txt)». Хорошей новостью является то, что все международные символы находятся в UTF16 (обратите внимание, а не на UTF8). Тем не менее, новый файл «* .txt» является разделителем TAB, а не запятой, и поэтому не является истинным CSV.
-
(необязательно) Если вы не можете использовать файл с разделителями TAB для импорта, используйте свой любимый текстовый редактор и замените символы TAB запятыми «,».
-
Импортируйте файл * .txt в целевое приложение. Убедитесь, что он может принимать формат UTF16.
Если UTF-16 был правильно реализован с поддержкой кодов без BMP, вы можете конвертировать файл UTF-16 в UTF-8 без потери информации. Я оставляю это вам, чтобы найти ваш любимый способ сделать это.
Я использую эту процедуру для импорта данных из Excel в Moodle.
Я знаю, что это старый вопрос, но я столкнулся с этим вопросом, борясь с теми же проблемами, что и ОП.
Не найдя ни одного из предлагаемых решений жизнеспособным вариантом, я решил выяснить, есть ли способ сделать это, просто используя Excel.
К счастью, я обнаружил, что проблема с потерянным символом происходит только (в моем случае) при сохранении формата xlsx в формате csv. Сначала я попытался сохранить файл xlsx в xls, а затем в csv. Это действительно сработало.
Пожалуйста, попробуйте и посмотрите, работает ли это для вас. Удачи.
Вы можете использовать команду iconv под Unix (также доступную в Windows как libiconv ).
После сохранения в CSV в Excel в командной строке поставьте:
iconv -f cp1250 -t utf-8 file-encoded-cp1250.csv > file-encoded-utf8.csv
(не забудьте заменить cp1250 на вашу кодировку).
Работает быстро и отлично для больших файлов, таких как база данных почтовых кодов, которые нельзя импортировать в GoogleDocs (ограничение 400 000 ячеек).
Единственный «простой способ» сделать это заключается в следующем. Во-первых, поймите, что существует разница между отображаемым и скрытым в файле Excel CSV.
(1) Откройте файл Excel, в котором у вас есть информация (.xls, .xlsx)
(2) В Excel выберите «CSV (Comma Delimited) (* .csv) в качестве типа файла и сохраните его как этот тип.
(3) В NOTEPAD (в разделе «Программы», а затем «Аксессуары в меню« Пуск ») откройте сохраненный CSV-файл в« Блокноте »
(4) Затем выберите -> Сохранить как … и в нижней части окна «Сохранить как», появится поле выбора, обозначенное как «Кодирование». Выберите UTF-8 (НЕ используйте ANSI или вы потеряете все акценты и т. Д.). После выбора UTF-8 сохраните файл в несколько другом имени файла из оригинала.
Этот файл находится в UTF-8 и сохраняет все символы и акценты и может быть импортирован, например, в MySQL и другие программы баз данных.
Этот ответ берется из этого форума .
Еще один, который я нашел полезным: « Numbers » позволяет использовать параметры кодирования при сохранении в CSV.
«nevets1219» прав о документах Google, однако, если вы просто «импортируете» файл, он часто не конвертирует его в UTF-8.
Но если вы импортируете CSV в существующую таблицу Google, она конвертируется в UTF-8.
Вот рецепт:
- На главном экране Документов (или Диска) нажмите кнопку «Создать» и выберите «Электронная таблица»,
- В меню «Файл» выберите «Импорт»,
- Нажмите «Выбрать файл»
- Выберите «Заменить таблицу»
- Выберите тот символ, который вы используете в качестве разделителя
- Нажмите «Импорт»
- В меню «Файл» выберите «Загрузить как» -> CSV (текущий лист)
Полученный файл будет находиться в UTF-8
Вы можете сделать это на современной Windows-машине без стороннего программного обеспечения. Этот метод является надежным и будет обрабатывать данные, содержащие цитируемые запятые, цитируемые символы табуляции, символы CJK и т. Д.
1. Сохранить в Excel
В Excel сохраните данные в file.txt
с помощью типа Unicode Text (*.txt)
.
2. Запустите PowerShell
Запустите powershell
из меню «Пуск».
3. Загрузите файл в PowerShell
$data = Import-Csv C:\path\to\file.txt -Delimiter "`t" -Encoding BigEndianUnicode
4. Сохраните данные как CSV
$data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation
Для тех, кто ищет полностью программное (или, по крайней мере, серверное) решение, я имел большой успех, используя инструмент xls2csv от catdoc.
Установить catdoc:
apt-get install catdoc
Сделайте преобразование:
xls2csv -d utf-8 file.xls > file-utf-8.csv
Это быстро вспыхивает.
Обратите внимание, что важно включить флаг -d utf-8
, иначе он будет кодировать вывод в кодировке cp1252
по умолчанию, и вы рискуете потерять информацию.
Обратите внимание, что xls2csv
также работает только с файлами .xls
, он не работает с файлами .xlsx
.
Как насчет использования Powershell.
Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8
Я не смог найти решение VBA для этой проблемы в Mac Excel. Казалось, что невозможно выводить текст UTF-8.
Поэтому мне, наконец, пришлось отказаться от VBA, укусить пулю и научиться AppleScript. Это было не так плохо, как я думал.
Решение описано здесь: http://talesoftech.blogspot.com/2011/05/excel-on-mac-goodbye-vba-hello.html
Предполагая среду Windows, сохраняйте и работайте с файлом, как обычно, в Excel, но затем откройте сохраненный файл Excel в Gnome Gnumeric (бесплатно). Сохраните таблицу Gnome Gnumeric как CSV, которая – для меня в любом случае – сохраняет ее как CSV UTF-8.
Легкий способ сделать это: загрузить открытый офис ( здесь ), загрузить электронную таблицу и открыть файл excel ( .xls
или .xlsx
). Затем просто сохраните его как текстовый CSV-файл и откроется окно с просьбой сохранить текущий формат или сохранить в формате .ODF. выберите «сохранить текущий формат», а в новом окне выберите вариант, который лучше подходит для вас, в соответствии с языком, на котором написан ваш файл. Для испанского языка выберите Западную Европу ( Windows-1252/ WinLatin 1
), и файл работает отлично. Если вы выберете Unicode ( UTF-8
), он не будет работать с испанскими символами.
-
Сохранить файл xls (файл Excel) в виде файла Unicode text => будет сохранен в текстовом формате (.txt)
-
Измените формат с .txt на .csv (переименуйте файл из XYX.txt в XYX.csv
Как ни забавно, самый простой способ, которым я нашел, чтобы сохранить мою таблицу 180 Мбайт в файле CSV UTF8, состоял в том, чтобы выбрать ячейки в Excel, скопировать их и вставить содержимое буфера обмена в SublimeText.
Второй вариант для «nevets1219» – открыть файл CSV в Notepad ++ и сделать преобразование в ANSI.
Выберите в верхнем меню: Кодирование -> Конвертировать в Ansi
Microsoft Excel имеет возможность экспортировать электронную таблицу с использованием кодировки Unicode. См. Следующий снимок экрана.
Самый простой способ: нет необходимости. Открыть офис и документы google.
- Сохраните файл как «текстовый файл Unicode»;
- теперь у вас есть текстовый файл в формате Юникод
- откройте его «Блокнот» и «Сохранить как» с помощью выбора «utf-8» или другой кодовой страницы, которую вы хотите
- переименовать расширение файла с "txt" на "csv"
не открывайте его с Ms-office в любом случае !!! Теперь у вас есть файл CSV с разделителями табуляции.
Я написал небольшой скрипт Python, который может экспортировать рабочие листы в UTF-8.
Вам просто нужно предоставить файл Excel в качестве первого параметра, а затем листы, которые вы хотите экспортировать. Если вы не предоставите листы, скрипт будет экспортировать все листы, которые присутствуют в файле Excel.
#!/usr/bin/env python # export data sheets from xlsx to csv from openpyxl import load_workbook import csv from os import sys reload(sys) sys.setdefaultencoding('utf-8') def get_all_sheets(excel_file): sheets = [] workbook = load_workbook(excel_file,use_iterators=True,data_only=True) all_worksheets = workbook.get_sheet_names() for worksheet_name in all_worksheets: sheets.append(worksheet_name) return sheets def csv_from_excel(excel_file, sheets): workbook = load_workbook(excel_file,use_iterators=True,data_only=True) for worksheet_name in sheets: print("Export " + worksheet_name + " ...") try: worksheet = workbook.get_sheet_by_name(worksheet_name) except KeyError: print("Could not find " + worksheet_name) sys.exit(1) your_csv_file = open(''.join([worksheet_name,'.csv']), 'wb') wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL) for row in worksheet.iter_rows(): lrow = [] for cell in row: lrow.append(cell.value) wr.writerow(lrow) print(" ... done") your_csv_file.close() if not 2 <= len(sys.argv) <= 3: print("Call with " + sys.argv[0] + " <xlxs file> [comma separated list of sheets to export]") sys.exit(1) else: sheets = [] if len(sys.argv) == 3: sheets = list(sys.argv[2].split(',')) else: sheets = get_all_sheets(sys.argv[1]) assert(sheets != None and len(sheets) > 0) csv_from_excel(sys.argv[1], sheets)
Кодирование -> Преобразование в Ansi будет кодировать его в ANSI / UNICODE. Utf8 – это подмножество Unicode. Возможно, в ANSI будет закодировано правильно, но здесь мы говорим о UTF8, @SequenceDigitale.
Существуют более быстрые способы, такие как экспорт csv (с разделителями-запятыми), а затем открытие этого csv с помощью Notepad ++ (бесплатно), а затем Encoding> Convert to UTF8. Но только если вам нужно сделать это один раз в файл. Если вам нужно часто меняться и экспортироваться, лучшим решением является LibreOffice или GDocs.
открыть .csv отлично с помощью блокнота ++. если вы видите, что ваша кодировка хороша (вы видите все символы, как они должны быть), нажмите кодировку, а затем конвертируйте в ANSI else – узнайте, какова ваша текущая кодировка
Другое решение – открыть файл с помощью winword и сохранить его как txt, а затем снова открыть его с помощью excel, и он будет работать ISA
Пошла одна и та же проблема и вышла из этой публикации. Ничто из этого не помогло мне. Наконец, я преобразовал свой Unicode .xls в .xml (выберите Save as … XML Spreadsheet 2003) и создал правильный символ. Затем я написал код для разбора xml и извлеченного содержимого для моего использования.
Я использовал следующее решение: Mac Exel 2008> file> Save-as, а затем в формате использовать MS_DOS Comma Separated (.csv). Работал отлично.
Другой способ – открыть CSV-файл UTF-8 в Блокноте, где он будет отображаться правильно. Затем замените все «,» на вкладки. Вставьте все это в новый файл excel.
У меня такая же проблема, и я сталкиваюсь с этим дополнением, и он отлично работает в excel 2013, помимо Excel 2007 и 2010, о котором он упоминает.
Сохранить диалог> Кнопка «Инструменты»> «Веб-параметры»> вкладка «Кодировка»
Мне нужно было автоматизировать этот процесс на моем Mac. catdoc/xls2csv
я попытался использовать catdoc/xls2csv
как было предложено mpowered, но у xls2csv
возникли проблемы с обнаружением исходного кодирования документа, и не все документы были одинаковыми. То, что я закончил, заключалось в том, что установка кодировки вывода по умолчанию для веб-страницы была UTF-8
а затем предоставление файлов в Automator от Apple, применяя действие « Convert Format of Excel Files
для преобразования в Web Page (HTML)
. Затем, используя PHP
, DOMDocument
и XPath
, я запросил документы и отформатировал их в CSV
.
Это PHP-скрипт (process.php):
<?php $pi = pathinfo($argv[1]); $file = $pi['dirname'] . '/' . $pi['filename'] . '.csv'; $fp = fopen($file,'w+'); $doc = new DOMDocument; $doc->loadHTMLFile($argv[1]); $xpath = new DOMXPath($doc); $table = []; foreach($xpath->query('//tr') as $row){ $_r = []; foreach($xpath->query('td',$row) as $col){ $_r[] = trim($col->textContent); } fputcsv($fp,$_r); } fclose($fp); ?>
И это команда оболочки, которую я использовал для преобразования HTML-документов в csv:
find . -name '*.htm' | xargs -I{} php ./process.php {}
Это действительно очень крутой способ сделать это, но это был самый надежный метод, который я нашел.
Я использую программу, которую я нашел в сети (не мой, и нет кредита). Но он работает без потерь
https://www.dropbox.com/s/vllyvlv6rekd69v/CpConverter.exe?dl=0
- Choose your file - select europ (windows) 1252 as source - select UNICODE UTF-8 as destination
и нажмите пробег
Вы можете импортировать в UTF8 или импортировать файл UFT8, управлять им в excel, а затем экспортировать его в UTF8