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

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

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

Ответ 1

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

ПРИМЕЧАНИЕ. В листе Google есть ограничения при импорте. См. здесь.

ПРИМЕЧАНИЕ. Будьте осторожны с конфиденциальными данными с помощью Google Таблиц.

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

Ответ 2

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

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

открыть диалог сохранения

Ответ 3

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

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

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

Если UTF-16 был правильно реализован с поддержкой кодов без BMP, вы можете преобразовать файл UTF-16 в UTF-8 без потери информации. Я оставляю это вам, чтобы найти ваш любимый способ сделать это.

Я использую эту процедуру для импорта данных из Excel в Moodle.

Ответ 4

Я знаю, что это старый вопрос, но я столкнулся с этим вопросом, борясь с теми же проблемами, что и OP.

Не нашли ни одного из предлагаемых решений жизнеспособным вариантом, я решил выяснить, есть ли способ сделать это, просто используя Excel.

К счастью, я обнаружил, что проблема с потерянным символом происходит только (в моем случае) при сохранении из формата xlsx в формате csv. Сначала я попытался сохранить файл xlsx в xls, а затем в csv. Это действительно сработало.

Пожалуйста, попробуйте и посмотрите, работает ли это для вас. Удачи.

Ответ 5

Вы можете использовать команду iconv под Unix (также доступную в Windows как libiconv).

После сохранения в CSV в Excel в командной строке поставьте:

iconv -f cp1250 -t utf-8 file-encoded-cp1250.csv > file-encoded-utf8.csv

(не забудьте заменить cp1250 на вашу кодировку).

Работает быстро и отлично для больших файлов, таких как база данных почтовых кодов, которые нельзя импортировать в GoogleDocs (ограничение 400 000 ячеек).

Ответ 6

Единственный "простой способ" сделать это заключается в следующем. Во-первых, поймите, что существует разница между отображаемым и скрытым в файле Excel CSV.

(1) Откройте файл Excel, в котором у вас есть информация (.xls,.xlsx)

(2) В Excel выберите "CSV (Comma Delimited) (*.csv) в качестве типа файла и сохраните его как этот тип.

(3) В NOTEPAD (в разделе "Программы", а затем "Аксессуары в меню" Пуск ") откройте сохраненный CSV файл в" Блокноте "

(4) Затем выберите → Сохранить как... и в нижней части поля "Сохранить как", появится поле выбора, обозначенное как "Кодирование". Выберите UTF-8 (НЕ используйте ANSI или вы потеряете все акценты и т.д.). После выбора UTF-8 сохраните файл в несколько другом имени файла из оригинала.

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

Этот ответ взят из этого форума.

Ответ 7

Еще один, который я нашел полезным: " Числа" позволяет использовать параметры кодирования при сохранении в CSV.

Ответ 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

Ответ 9

"nevets1219" правильно относится к документам Google, однако, если вы просто "импортируете" файл, он часто не конвертирует его в UTF-8.

Но если вы импортируете CSV в существующую таблицу Google, она преобразуется в UTF-8.

Вот рецепт:

  • На главном экране Документов (или Диска) нажмите кнопку "Создать" и выберите "Электронная таблица"
  • В меню "Файл" выберите "Импорт"
  • Нажмите "Выбрать файл"
  • Выберите "Заменить электронную таблицу"
  • Выберите, какой символ вы используете в качестве разделителя
  • Нажмите "Импорт"
  • В меню "Файл" выберите "Загрузить как" → CSV (текущий лист)

Результирующий файл будет находиться в UTF-8

Ответ 10

Для тех, кто ищет полностью программное (или, по крайней мере, серверное) решение, я имел большой успех, используя инструмент catdoc xls2csv.

Установить catdoc:

apt-get install catdoc

Сделайте преобразование:

xls2csv -d utf-8 file.xls > file-utf-8.csv 

Это быстро растет.

Обратите внимание, что важно включить флаг -d utf-8, иначе он будет кодировать вывод в кодировке по умолчанию cp1252, и вы рискуете потерять информацию.

Обратите внимание, что xls2csv также работает только с файлами .xls, он не работает с .xlsx файлами.

Ответ 11

Как насчет использования Powershell.

Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8

Ответ 12

Как ни странно, самый простой способ, которым я нашел, чтобы сохранить мою таблицу 180 Мбайт в файл CSV UTF8, состоял в том, чтобы выбрать ячейки в Excel, скопировать их и вставить содержимое буфера обмена в SublimeText.

Ответ 13

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

Выберите в верхнем меню: Кодирование → Конвертировать в Ansi

Ответ 14

Мне не удалось найти решение VBA для этой проблемы в Mac Excel. Казалось, что невозможно выводить текст UTF-8.

Поэтому мне, наконец, пришлось отказаться от VBA, укусить пулю и узнать AppleScript. Это было не так плохо, как я думал.

Решение описано здесь: http://talesoftech.blogspot.com/2011/05/excel-on-mac-goodbye-vba-hello.html

Ответ 15

Предполагая среду Windows, сохраняйте и работайте с файлом, как обычно, в Excel, но затем откройте сохраненный файл Excel в Gnome Gnumeric (бесплатно). Сохраните Gnome Gnumeric таблицу как CSV, которая - для меня в любом случае - сохраняет ее как CSV UTF-8.

Ответ 16

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

Ответ 17

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

  • Измените формат с .txt на .csv(переименуйте файл из XYX.txt в XYX.csv

Ответ 18

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

enter image description here

Ответ 19

Я написал небольшой Python script, который может экспортировать рабочие листы в UTF-8.

Вам просто нужно предоставить файл Excel в качестве первого параметра, а затем листы, которые вы хотите экспортировать. Если вы не предоставите листы, script будет экспортировать все листы, которые присутствуют в файле 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)

Ответ 21

самый простой способ: нет необходимости Открыть офис и документы Google

  • Сохраните файл как "текстовый файл в Юникоде";
  • теперь у вас есть текстовый файл в формате Юникод
  • откройте его с помощью "блокнот" и "Сохранить как", выбрав "utf-8" или другую кодовую страницу, которую вы хотите.
  • переименовать расширение файла с "txt" на "csv"

не открывайте его с Ms-office в любом случае!!! Теперь у вас есть файл CSV с разделителями табуляции.

Ответ 22

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

Ответ 23

Обычно Excel сохраняет файл csv как кодировку ANSI вместо utf8.

Один из вариантов исправления файла - использовать Notepad или Notepad ++:

  • Откройте .csv с помощью Notepad или Notepad ++.
  • Скопируйте содержимое в буфер обмена на компьютере.
  • Удалить содержимое из файла.
  • Измените кодировку файла на utf8.
  • Вставьте содержимое из буфера обмена.
  • Сохраните файл.

Ответ 24

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

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

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

Ответ 25

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

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

Ответ 26

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

Ответ 27

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

Ответ 28

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

Ответ 29

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

Ответ 30

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