Excel в CSV с кодировкой UTF8


У меня есть файл Excel, который имеет некоторые испанские символы (Тильды и т. д.) что мне нужно преобразовать в файл CSV для использования в качестве файла импорта. Однако, когда я сохраняю как CSV, он искажает "специальные" испанские символы, которые не являются символами ASCII. Он также, кажется, делает это с левыми и правыми кавычками и длинными тире, которые, как представляется, исходят от исходного пользователя, создающего файл Excel в Mac.

поскольку CSV-это просто текстовый файл, я уверен, что он может обрабатывать кодировку UTF8, поэтому я предполагая, что это ограничение Excel, но я ищу способ перейти от Excel к CSV и сохранить символы, отличные от ASCII, нетронутыми.

30 528

30 ответов:

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

Примечание: Google Sheets имеет ограничения при импорте. Смотрите здесь.

Примечание: будьте осторожны с конфиденциальными данными с Google Sheets.

EDIT:другая альтернатива - в основном они используют макрос VB или надстройки для принудительного сохранения как В utf8. Я не пробовал ни одного из этих решений, но они звучат разумно.

Я нашел OpenOfficeприложение для электронных таблиц, Calc, действительно хорошо обрабатывает данные CSV.

в поле "Сохранить как..."диалоговое окно, нажмите кнопку "Параметры формата", чтобы получить различные кодировки для CSV. LibreOffice работает точно так же, насколько мне известно.

calc save dialog

  1. сохраните лист Excel как " Unicode Text (.формат txt.") Хорошей новостью является то, что все международные символы находятся в UTF16 (обратите внимание, не в UTF8). Впрочем, новый "*.txt " файл разделен табуляцией, а не запятыми, и поэтому не является истинным CSV.

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

  3. импортировать *.txt файл в целевое приложение. Убедитесь, что он может принимать формат UTF16.

Если UTF-16 был правильно реализован с поддержкой не BMP code points, то вы можете конвертировать файл 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

выполнить 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.

вот рецепт:

  • на главном экране Docs (или Drive) нажмите кнопку "Создать" и выберите "электронная таблица"
  • в меню" Файл "выберите"Импорт"
  • Нажмите "Выбрать Файл"
  • выбрать "Заменить электронную таблицу"
  • выбрать любой символ, который вы используете в качестве разделителя
  • Нажмите Кнопку "Импорт"
  • в меню" Файл "выберите" Загрузить как " - > 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

Как ни смешно, самый простой способ, который я нашел, чтобы сохранить мою таблицу 180 МБ в файле UTF8 CSV было выбрать ячейки в 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 (бесплатно). Электронная таблица Gnumeric табличный Гном сохранить как CSV, который - для меня - сохранить его как UTF-8 CSV-файл.

простой способ сделать это: скачать open office (здесь), загрузите электронную таблицу и откройте файл excel (.xls или .xlsx). Затем просто сохраните его как текстовый файл CSV, и откроется окно с просьбой сохранить текущий формат или сохранить как a .Формат ODF. выберите "Сохранить текущий формат" и в новом окне выберите вариант, который работает лучше для вас, в соответствии с языком, на котором был написан ваш файл. Для испанского языка выберите Западная Европа (Windows-1252/ WinLatin 1) и файл работает только штраф. Если вы выберете Unicode (UTF-8), он не будет работать с испанским персонажей.

  1. сохранить файл xls (файл Excel) в виде текста Unicode=>файл будет сохранен в текстовом формате (.txt)

  2. изменить формат .txt to .csv (переименовать файл из XYX.от txt до XYX.csv

в Excel 2016 у нас есть опция экспорта CSV, предназначенная для формата UTF-8.

Я тоже сталкивался с той же проблемой, но есть простое решение для этого.

  1. откройте файл xlsx в Excel 2016 или выше.
  2. в поле "Сохранить как" выберите этот параметр: "(CSV UTF-8(через запятую)*.csv)"

Он отлично работает, и создается файл csv, который можно импортировать в любое программное обеспечение. Я импортировал этот csv-файл в свою базу данных SQLITE, и он отлично работает со всеми символами unicode.

второй вариант "nevets1219" - открыть CSV-файл в Notepad++ и выполнить преобразование в ANSI.

выбираем в верхнем меню : Кодировка - > конвертировать в Ansi

самый простой способ: нет необходимости открывать office и google docs

  1. сохраните файл как "текстовый файл Unicode";
  2. теперь у вас есть текстовый файл unicode
  3. откройте его с помощью "блокнота" и "сохранить как", выбрав "utf-8" или другая кодовая страница, которую вы хотите
  4. переименовать расширение файла из "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.

один из вариантов, чтобы исправить файл, чтобы использовать блокнот или блокнот++:

  1. открыть .CSV с помощью блокнота или Notepad++.
  2. скопируйте содержимое в буфер обмена компьютера.
  3. удалить содержимое из файла.
  4. измените кодировку файла на utf8.
  5. вставить содержимое обратно из буфера обмена.
  6. сохранить файл.

кодировка - > преобразование в Ansi будет кодировать его в ANSI / UNICODE. Utf8 является подмножеством Unicode. Возможно, в ANSI будет правильно закодировано, но здесь речь идет о UTF8, @SequenceDigitale.

есть более быстрые способы, такие как экспорт в формате csv ( с разделителями-запятыми), а затем открытие этого csv с помощью Notepad++ ( бесплатно), а затем кодирование > преобразование в UTF8. Но только если вам нужно сделать это один раз за файл. Если вам нужно изменить и экспортировать fequently, то лучше всего это LibreOffice или Gdoc решение.

Microsoft Excel имеет возможность экспортировать электронную таблицу с помощью кодировки Unicode. Смотрите следующий скриншот.

enter image description here

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

другое решение-открыть файл с помощью winword и сохранить его как txt, а затем снова открыть его с помощью excel, и он будет работать ISA

Сохранить Диалог > Кнопка Инструменты > Веб-Параметры > Вкладка Кодировка

наткнулся на ту же проблему и погуглил этот пост. Ничто из вышеперечисленного не работало для меня. Наконец я преобразовал свой Unicode .xls to .xml (выберите Сохранить как ... XML Spreadsheet 2003) и он произвел правильный символ. Затем я написал код для разбора xml и извлек содержимое для моего использования.

другой способ-открыть файл CSV UTF-8 в блокноте, где он будет отображаться правильно. Затем замените все "," на вкладки. Вставить все это в новый файл Excel.

У меня такая же проблема и встретить этой добавьте, и он отлично работает в excel 2013 рядом с excel 2007 и 2010, для которых он упоминается.