Excel в CSV с кодировкой UTF8
У меня есть файл Excel, который имеет некоторые испанские символы(Тильды и т. д.) что мне нужно преобразовать в файл CSV для использования в качестве файла импорта. Однако, когда я сохраняю как CSV, он искажает "специальные" испанские символы, которые не являются символами ASCII. Кажется, что это также происходит с левыми и правыми кавычками и длинными тире, которые, как представляется, исходят от исходного пользователя, создающего файл Excel в Mac.
поскольку CSV - это просто текстовый файл, я уверен, что он может обрабатывать кодировку UTF8, поэтому я предполагая, что это ограничение Excel, но я ищу способ получить из Excel в CSV и сохранить символы, отличные от ASCII.
30 ответов
простой обходной путь-использовать электронную таблицу Google. Вставьте (значения, только если у вас есть сложные формулы) или импортируйте лист, а затем загрузите CSV. Я просто попробовал несколько персонажей, и это работает довольно хорошо.
Примечание: Google листы имеют ограничения при импорте. См.здесь.
Примечание: будьте осторожны с конфиденциальными данными с Google листов.
EDIT:другая альтернатива - в основном они используют макрос VB или addins для принудительного сохранения как В utf8. Я не пробовал ни одного из этих решений, но они звучат разумно.
Я нашел OpenOfficeприложение электронной таблицы, Calc, действительно хорошо обрабатывает данные CSV.
в "Сохранить как..."диалог, нажмите "Параметры формата", чтобы получить различные кодировки для CSV. LibreOffice работает так же, как AFAIK.
сохраните лист Excel как " Unicode Text (.формат txt.") Хорошей новостью является то, что все международные символы находятся в UTF16 (обратите внимание, не в UTF8). Однако новое"*.файл " txt " имеет разделители табуляции, а не запятые, и поэтому не является истинным CSV.
(необязательно) если вы не можете использовать файл с разделителями табуляции для импорта, используйте свой любимый текстовый редактор и замените символы табуляции запятыми ",".
импортировать *.txt файл в целевое приложение. Убедитесь, что он может принять формат UTF16.
Если UTF-16 был правильно реализован с поддержкой кодовых точек, отличных от BMP, то вы можете конвертировать файл UTF-16 в UTF-8 без потери информации. Я предоставляю вам найти ваш любимый способ сделать это.
Я использую эту процедуру для импорта данных из Excel в Moodle.
Я знаю, что это старый вопрос, но я случайно наткнулся на этот вопрос, борясь с теми же проблемами, что и OP.
не найдя ни одного из предлагаемых решений жизнеспособным вариантом, я решил выяснить, есть ли способ сделать это только с помощью 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 (с разделителями-запятыми) (*.csv) как тип файла и сохранить как этот тип.
(3) в блокноте (найдено в разделе "программы", а затем аксессуары в Start меню), откройте сохраненный .CSV-файл в блокноте
(4) затем выберите - > Сохранить как..и в нижней части окна" сохранить как "есть поле выбора, помеченное как"кодировка". Выберите UTF-8 (Не используйте ANSI или вы потеряете все акценты и т. д.). После выбора UTF-8 сохраните файл в несколько отличающемся от исходного имени.
этот файл находится в UTF-8 и сохраняет все символы и акценты и может быть импортирован, например, в MySQL и другую базу данных программы.
этот ответ взят из этот форум.
еще один, который я нашел полезным: "цифры " позволяет настройки кодирования при сохранении в формате CSV.
вы можете сделать это на современной машине Windows без стороннего программного обеспечения. Этот метод надежен и будет обрабатывать данные, которые включают кавычки, символы табуляции, символы CJK и т. д.
1. Сохранить из Excel
в Excel сохраните данные в file.txt
С помощью типа Unicode Text (*.txt)
.
2. Запустить PowerShell
Run 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
" nevets1219 "прав насчет Google docs, однако если вы просто" импортируете " файл, он часто не конвертирует его в UTF-8.
но если вы импортируете CSV в существующую электронную таблицу Google, она преобразуется в UTF-8.
вот рецепт:
- на главном экране документов (или диска) Нажмите кнопку" Создать "и выберите"электронная таблица"
- в меню " Файл "выберите"Импорт"
- Нажмите "Выбрать Файл"
- выбрать "Заменить электронную таблицу"
- выбрать любой символ, который вы используете в качестве разделителя
- Нажмите Кнопку "Импорт"
- в меню "Файл" выберите "Загрузить как" - > CSV (текущий лист)
полученный файл будет в UTF-8
для тех, кто ищет полностью программное (или, по крайней мере, серверное) решение, я имел большой успех, используя инструмент 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
Как ни смешно, самый простой способ сохранить мою таблицу 180MB в файл CSV UTF8-это выбрать ячейки в Excel, скопировать их и вставить содержимое буфера обмена в SublimeText.
Я не смог найти решение 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, которая-для меня в любом случае-сохраняет ее как UTF-8 CSV.
простой способ сделать это: скачать open office (здесь), загрузите электронную таблицу и откройте файл excel (.xls
или .xlsx
). Затем просто сохраните его как текстовый CSV-файл, и откроется окно с просьбой сохранить текущий формат или сохранить как.Формат ODF. выберите "Сохранить текущий формат" и в новом окне выберите вариант, который работает лучше для вас, в соответствии с языком, на котором написан ваш файл. Для испанского языка выберите Западная Европа (Windows-1252/ WinLatin 1
) и файл работает только штраф. Если выбрать Unicode (UTF-8
), он не будет работать с испанским персонажей.
сохранить файл xls (файл Excel) в виде текста Unicode=>файл будет сохранен в текстовом формате (.txt)
изменить формат .txt to .csv (переименуйте файл из XYX.txt-XYX.csv
Я также столкнулся с той же проблемой, но для этого есть простое решение.
- откройте файл xlsx в Excel 2016 или выше.
- В "Сохранить как" выберите эту опцию: "(CSV UTF-8 (с разделителями запятыми)*.csv)"
Он работает отлично, и создается файл csv, который можно импортировать в любое программное обеспечение. Я импортировал этот csv-файл в свою базу данных SQLITE, и он отлично работает со всеми символами unicode.
второй вариант "nevets1219" - открыть CSV-файл в Notepad++ и выполнить преобразование в ANSI.
выбираем в верхнем меню : Кодировка - > преобразовать в Ansi
самый простой способ: нет необходимости открывать office и Google docs
- сохраните файл как "текстовый файл Unicode";
- теперь у вас есть текстовый файл 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)
Excel обычно сохраняет csv-файл как кодировку ANSI вместо utf8.
один из вариантов исправления файла - использовать Notepad или Notepad++:
- открыть .csv с блокнотом или Notepad++.
- скопируйте содержимое в буфер обмена компьютера.
- удалить содержимое из файла.
- измените кодировку файла на utf8.
- вставить содержимое обратно из буфера обмена.
- сохранить файл.
Encoding - > Convert to Ansi будет кодировать его в ANSI / UNICODE. Utf8 является подмножеством Unicode. Возможно, в ANSI будет закодировано правильно, но здесь мы говорим о UTF8, @SequenceDigitale.
есть более быстрые способы, такие как экспорт в csv ( с разделителями-запятыми), а затем открытие этого csv с помощью Notepad++ ( бесплатно), а затем кодирование > конвертировать в UTF8. Но только если вам нужно сделать это один раз за файл. Если вам нужно изменить и экспортировать fequently, то лучше всего LibreOffice или GDocs решение.
Microsoft Excel имеет возможность экспортировать электронную таблицу с помощью кодировки Unicode. Смотрите следующий скриншот.
открыть .csv отлично с notepad++. если вы видите, что ваша кодировка хороша (вы видите все символы, как они должны быть), нажмите кодировку , затем преобразуйте в ANSI еще - узнайте, какова ваша текущая кодировка
другое решение-открыть файл winword и сохранить его как txt, а затем снова открыть его excel, и он будет работать ISA
наткнулся на ту же проблему и погуглил этот пост. Ничего из вышеперечисленного на меня не подействовало. Наконец я преобразовал свой Unicode .xls to .xml (выберите Сохранить как ... XML Spreadsheet 2003), и он произвел правильный символ. Затем я написал код для анализа xml и извлек содержимое для моего использования.
другой способ-открыть файл CSV UTF-8 в блокноте, где он будет отображаться правильно. Затем замените все "," на вкладки. Вставить все это в новый файл Excel.
У меня такая же проблема и встретить этой добавить, и он отлично работает в excel 2013 рядом с excel 2007 и 2010, о которых упоминается.