excel - unicode轉換 - vcf亂碼




使用UTF8編碼將Excel轉換為CSV (20)

  1. 將xls文件(Excel文件)保存為Unicode文本=>文件將以文本格式(.txt)保存

  2. 將格式從.txt更改為.csv(將文件從XYX.txt重命名為XYX.csv

我有一個Excel文件,其中包含一些西班牙字符(波浪線等),我需要將其轉換為CSV文件以用作導入文件。 但是,當我做另存為CSV時,它會損壞不是ASCII字符的“特殊”西班牙字符。 它似乎也是通過左右引號和長破折號來實現的,這些引號和長破折號似乎來自在Mac中創建Excel文件的原始用戶。

由於CSV只是一個文本文件,我相信它可以處理UTF8編碼,所以我猜這是一個Excel限制,但我正在尋找一種方法從Excel中獲取到CSV並保留非ASCII字符完整。


  1. 將Excel工作表保存為“Unicode文本(.txt)”。 好消息是所有的國際字符都是UTF16(注意,不是UTF8)。 但是,新的“* .txt”文件是TAB分隔的,而不是逗號分隔的,因此不是真正的CSV。

  2. (可選)除非您可以使用TAB分隔文件進行導入,否則請使用您最喜歡的文本編輯器並用逗號“,”替換TAB字符。

  3. 在目標應用程序中導入* .txt文件。 確保它可以接受UTF16格式。

如果UTF-16已經正確實施並支持非BMP代碼點,那麼您可以在不丟失信息的情況下將UTF-16文件轉換為UTF-8文件。 我把它留給你找到你最喜歡的方法。

我使用此過程將數據從Excel導入到Moodle。


“nevets1219”的第二個選項是在Notepad ++中打開CSV文件並轉換為ANSI。

在頂部菜單中選擇:編碼 - >轉換為Ansi


Excel通常將csv文件保存為ANSI編碼而不是utf8。

更正文件的一個選擇是使用記事本或記事本++:

  1. 用記事本或記事本++打開.csv。
  2. 將內容複製到您的計算機剪貼板。
  3. 從文件中刪除內容。
  4. 將文件的編碼更改為utf8。
  5. 從剪貼板中粘貼內容。
  6. 保存文件。

最簡單的方法: 不需要開放式辦公室和谷歌文檔

  1. 將您的文件保存為“Unicode文本文件”;
  2. 現在你有一個Unicode文本文件
  3. 用“記事本”和“另存為”打開它,選擇“utf-8”或你想要的其他代碼頁
  4. 將文件擴展名從“txt”重命名為“csv”

不要打開它與Ms-office無論如何! 現在你有一個製表符分隔的CSV文件。


一個簡單的解決方法是使用Google Spreadsheet。 粘貼(僅限於具有復雜公式的值)或導入圖紙,然後下載CSV。 我只是嘗試了幾個角色,而且效果很好。

注意:Google表格在導入時確實存在限制。 看到here

注意:請注意Google表格中的敏感數據。

編輯: 另一種選擇 - 基本上他們使用VB宏或插件強制保存為UTF8。 我還沒有嘗試過這些解決方案,但聽起來很合理。


保存對話框>工具按鈕> Web選項>編碼選項卡


假設一個Windows環境,在Excel中像往常一樣保存和處理文件,然後在Gnome Gnumeric(免費)中打開保存的Excel文件。 將Gnome Gnumeric的電子表格保存為CSV,對我來說 - 將其保存為UTF-8 CSV。


另一種方法是在記事本中打開UTF-8 CSV文件,它將正確顯示。 然後用標籤替換所有的“,”。 將所有這些粘貼到一個新的Excel文件中。


另一種解決方案是通過winword打開文件並將其保存為txt,然後通過excel重新打開它,它將工作ISA


對於那些尋求完全程序化(或至少服務器端)解決方案的人來說,使用catdoc的xls2csv工具取得了巨大的成功。

安裝catdoc:

apt-get install catdoc

做轉換:

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

這是快速的。

請注意,包含-d utf-8標誌很重要,否則它將以默認的cp1252編碼對輸出進行編碼,並且會冒著丟失信息的風險。

請注意, xls2csv也只適用於.xls文件,它不適用於.xlsx文件。


您可以在Unix下使用iconv命令(也可以在Windows上以libiconv )。

在命令行的Excel下保存為CSV後,輸入:

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

(請記住用您的編碼替換cp1250)。

適用於郵政編碼數據庫等大文件,無法導入到GoogleDocs(限制400.000個單元格)。


我也遇到了同樣的問題,但有一個簡單的解決方案。

  1. 在Excel 2016或更高版本中打開您的xlsx文件。
  2. 在“另存為”中選擇此選項:“(CSV UTF-8(逗號分隔)* .csv)”

它完美地工作,並生成一個CSV文件,可以在任何軟件導入。 我在我的SQLITE數據庫中導入了這個csv文件,它完全適用於所有unicode字符。


我寫了一個可以導出UTF-8工作表的小Python腳本。

您只需提供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)

我發現OpenOffice的電子表格應用程序Calc非常擅長處理CSV數據。

在“另存為...”對話框中,單擊“格式選項”以獲取CSV的不同編碼。 LibreOffice工作方式與AFAIK相同。


我知道這是一個古老的問題,但我碰到這個問題的同時,也遇到了與OP相同的問題。

沒有找到任何提供的解決方案可行的選擇,我著手發現是否有一種方法可以使用Excel來做到這一點。

幸運的是,我發現從xlsx格式保存到csv格式時,只會發生丟失的字符問題(在我的情況下)。 我試著先將xlsx文件保存為xls,然後保存為csv。 它實際上工作。

請嘗試一下,看看它是否適合你。 祝你好運。


用記事本++打開.csv。 如果你看到你的編碼是好的(你應該看到所有的字符),按編碼,然後轉換為ANSI其他 - 找出你當前的編碼是什麼


看起來很有趣,我發現將180MB電子表格保存為UTF8 CSV文件的最簡單方法是將這些單元格選擇到Excel中,複製它們並將剪貼板的內容粘貼到SublimeText中。


編碼 - >轉換為Ansi將以ANSI / UNICODE編碼。 Utf8是Unicode的一個子集。 也許在ANSI中編碼是正確的,但在這裡我們正在談論UTF8,@SequenceDigitale。

有更快的方法,比如導出為csv(逗號分隔),然後用Notepad ++(免費)打開該csv,然後編碼>轉換為UTF8。 但前提是你必須為每個文件執行一次這樣的操作。 如果您需要頻繁更改和導出,那麼最好的是LibreOffice或GDocs解決方案。


這樣做的唯一“簡單方法”如下。 首先,要認識到顯示的內容與隱藏在Excel .csv文件中的內容之間存在差異。

(1)打開一個Excel文件,其中包含信息(.xls,.xlsx)

(2)在Excel中,選擇“CSV(逗號分隔)(* .csv)”作為文件類型並保存為該類型。

(3)在記事本(在“開始”菜單的“程序”和附件中找到)中,在記事本中打開保存的.csv文件

(4)然後選擇 - >另存為...並在“另存為”框的底部有一個標記為“編碼”的選擇框。 選擇UTF-8(不要使用ANSI或你失去所有的口音等)。 選擇UTF-8後,將文件保存為與原始文件略有不同的文件名。

該文件採用UTF-8格式,並保留所有字符和重音符,並可導入到MySQL和其他數據庫程序中。

這個答案來自這個論壇





utf-8