Excel sang CSV với mã hóa UTF8 [đã đóng]


607

Tôi có một tệp Excel có một số ký tự tiếng Tây Ban Nha (dấu ngã, v.v.) mà tôi cần chuyển đổi thành tệp CSV để sử dụng làm tệp nhập. Tuy nhiên, khi tôi thực hiện Save As CSV, nó sẽ xử lý các ký tự tiếng Tây Ban Nha "đặc biệt" không phải là ký tự ASCII. Nó dường như cũng làm điều này với các trích dẫn bên trái và bên phải và dấu gạch ngang dài dường như đến từ người dùng ban đầu tạo tệp Excel trong Mac.

Vì CSV chỉ là một tệp văn bản nên tôi chắc chắn rằng nó có thể xử lý mã hóa UTF8, vì vậy tôi đoán đó là một giới hạn Excel, nhưng tôi đang tìm cách chuyển từ Excel sang CSV và giữ các ký tự không phải ASCII nguyên vẹn.


15
Tôi đã thấy câu hỏi đó trước khi tôi đăng nhưng đó là về việc đã có CSV UTF8 và mở nó trong Excel chứ không phải cách khác.
Jeff Treuting

7
Các câu trả lời dưới đây có vẻ hiệu quả, nhưng chúng chỉ là cách giải quyết. Có ai biết làm Excel để làm điều này không?
NielW

2
Tôi muốn giảm 2 xu của mình: Sau rất nhiều lần dùng thử và lỗi, cố gắng sử dụng các hàm VBA, v.v ... (Tôi đang sử dụng Excel 97 vì nhiều lý do) ... chỉ đơn giản là Lưu-As vào "CSV (MSDOS) "Định dạng đã giải quyết vấn đề này cho tôi. Trong trường hợp của tôi, dữ liệu CSV của Citrix webinar (GotoWebinar) kết thúc bằng các ký tự để phá vỡ một số mã Apex ở cuối của chúng tôi - lưu vào "CSV (MSDOS)" giải quyết cho tôi (trước đây) tải xuất CSV sang Notepad ++ và dán nó vào UTF- 8 tập tin trống và lưu lại. :-P :-)
AMM

2
Đây là một hạn chế Excel rất khó chịu. Tôi đã mở một yêu cầu tính năng uservoice về điều này: excel.uservoice.com/forums/ , hãy thoải mái bỏ phiếu và thực hiện nó
Doron Yaacoby

7
theo uservoice, Microsoft đã bắt đầu làm việc trên UTF-8 cho .csv vào tháng trước excel.uservoice.com/forums/ Kẻ
moloko

Câu trả lời:


405

Một cách giải quyết đơn giản là sử dụng Bảng tính Google. Dán (chỉ các giá trị nếu bạn có công thức phức tạp) hoặc nhập trang tính sau đó tải xuống CSV. Tôi chỉ thử một vài nhân vật và nó hoạt động khá tốt.

LƯU Ý: Google Sheets không có giới hạn khi nhập. Xem tại đây .

LƯU Ý: Cẩn thận với dữ liệu nhạy cảm với Google Sheets.

EDIT: Một cách khác - về cơ bản họ sử dụng macro VB hoặc addins để buộc lưu dưới dạng UTF8. Tôi chưa thử bất kỳ giải pháp nào trong số này nhưng chúng có vẻ hợp lý.


63
Có lẽ Joel Slotsky (cựu Thủ tướng của Excel) có thể gửi cho họ bài đăng cũ hàng thập kỷ của mình trên The Tối thiểu tuyệt đối Mỗi nhà phát triển phần mềm Tuyệt đối, Tích cực phải biết về Unicode và Bộ ký tự ?
Nỗi đau

8
Với Windows Notepad bình thường (sử dụng lưu dưới dạng, sau đó chọn utf-8 trong tùy chọn mã hóa) đã hoạt động với tôi. Đối với tôi đó là cách tiếp cận tốt nhất đối với tôi vì điều đó phải được thực hiện bởi người dùng không có quyền quản trị viên trong máy của họ, vì vậy không cần cài đặt phần mềm bổ sung.
Fer

9
OpenOffice JustWorks (tm) không gặp rắc rối - Tôi nghĩ rằng nó nên được đưa vào
Rbjz

9
Ừm. Tôi chỉ có một cái rùng mình xuống lưng. Nếu tệp excel của bạn có 200.000 dòng thì sao? Hoặc chứa dữ liệu nhạy cảm mà bạn không muốn đưa vào bảng tính excel? Sử dụng Openoffice / Libreoffice nếu bạn cần.
Seb

2
Nếu kích thước tập tin lớn thì sao? Bảng Goolge có giới hạn kích thước khoảng 75M nếu tôi nhớ chính xác. Tôi có một tệp là 700M
News_is_Selection_Bias

133

Tôi đã tìm thấy OpenOffice ứng dụng bảng tính của , Calc, thực sự giỏi trong việc xử lý dữ liệu CSV.

Trong hộp thoại "Lưu dưới dạng ...", nhấp vào "Tùy chọn định dạng" để nhận các bảng mã khác nhau cho CSV. LibreScript hoạt động theo cách tương tự AFAIK.

hộp thoại calc lưu


Tôi chắc chắn rằng điều này hoạt động, tôi chỉ không có OpenOffice vì vậy Google Docs dễ dàng hơn trong tình huống của tôi. nhưng cảm ơn vì lời đề nghị
Jeff Treuting

19
OpenOffice Calc có nhiều tùy chọn tốt hơn khi mở và lưu tệp "CSV" (dấu tách trường, mã hóa, v.v.) so với cả Google Docs và Excel. Ngoài ra, Google Docs hiện đang bị giới hạn 400.000 ô trên mỗi bảng tính, điều mà OpenOffice Calc không có.
Christian Davén

3
Tôi có thể xác nhận LibreScript cũng hoạt động: nó cung cấp các tùy chọn mã hóa ký tự khi xuất mà thiếu Excel.
Rupert Rawnsley

1
Đây là một lựa chọn tuyệt vời cho những người làm việc với dữ liệu nhạy cảm. Bộ OpenOffice có thể là một bản cài đặt di động cho những người có máy bị khóa.
Nathan

119
  1. Lưu bảng Excel dưới dạng "Văn bản Unicode (.txt)". Tin tốt là tất cả các ký tự quốc tế đều ở UTF16 (lưu ý, không phải trong UTF8). Tuy nhiên, tệp "* .txt" mới được phân tách bằng TAB, không được phân cách bằng dấu phẩy và do đó không phải là một CSV thực sự.

  2. (tùy chọn) Trừ khi bạn có thể sử dụng tệp được phân tách bằng TAB để nhập, hãy sử dụng trình soạn thảo văn bản yêu thích của bạn và thay thế các ký tự TAB bằng dấu phẩy ",".

  3. Nhập tệp * .txt của bạn trong ứng dụng đích. Hãy chắc chắn rằng nó có thể chấp nhận định dạng UTF16.

Nếu UTF-16 đã được triển khai đúng cách với sự hỗ trợ cho các điểm mã không phải BMP, bạn có thể chuyển đổi tệp UTF-16 thành UTF-8 mà không mất thông tin. Tôi để nó cho bạn để tìm phương pháp yêu thích của bạn để làm như vậy.

Tôi sử dụng thủ tục này để nhập dữ liệu từ Excel sang Moodle.


5
Cuối cùng một cái gì đó đã làm việc! Đã thử các tùy chọn Excel trên trên Excel 2013 mà không thành công. Tôi chỉ chuyển sang sử dụng \ t làm ký tự phân tách khi phân tích cú pháp và nó hoạt động hoàn hảo!
Mattias Lindberg

1
Cần xuất XLS dưới dạng CSV để nhập trong MySQL. Sử dụng Excel 2003 Tôi đã xuất ở định dạng "Văn bản Unicode (.txt)", sau đó sử dụng Notepad ++ để thay thế TAB bằng ;, sau đó nhập tệp txt vào phpmyadmin với "Bộ ký tự của tệp: utf-8", Định dạng "CSV sử dụng dữ liệu LOAD ". Tất cả mã hóa đã được chuyển chính xác.
Kai Noack

3
Cảm ơn bạn. Điều này thật ý nghĩa. Tại sao MS vẫn từ chối sử dụng UTF như một tiêu chuẩn đánh bại tôi.
Oskar Limka 16/07/2015

4
@OskarLimka: Khi bạn nói "UTF", bạn có nghĩa là UTF-8 hoặc UTF-16? Bởi vì Microsoft sử dụng UTF-16 khá nhiều.
Flimm

7
"Tin tốt là tất cả các ký tự quốc tế đều ở UTF16 (lưu ý, không phải trong UTF8)." : hoàn toàn vô nghĩa . UTF-8 và UTF-16 là hai cách để mã hóa toàn bộ tập hợp các điểm mã Unicode.

43

Tôi biết đây là một câu hỏi cũ nhưng tôi tình cờ gặp câu hỏi này trong khi phải vật lộn với các vấn đề tương tự như OP.

Không tìm thấy bất kỳ giải pháp được cung cấp nào là một lựa chọn khả thi, tôi bắt đầu khám phá liệu có cách nào để làm điều này chỉ bằng cách sử dụng Excel.

May mắn thay, tôi đã thấy rằng vấn đề nhân vật bị mất chỉ xảy ra (trong trường hợp của tôi) khi lưu từ định dạng xlsx sang định dạng csv. Tôi đã thử lưu tệp xlsx vào xls trước, sau đó đến csv. Nó thực sự đã làm việc.

Vui lòng thử lại và xem nó có hiệu quả với bạn không. Chúc may mắn.


3
Đối với tôi, trên Excel cho Mac 2011, điều này hoạt động nhưng chỉ khi tôi chọn Windows comma separated (CSV). Nó không hoạt động nếu tôi sử dụng các tùy chọn CSV mặc định hoặc DOS - cả hai đều thay thế các ký tự có dấu bằng các ký tự rác ngẫu nhiên. Thử nghiệm cho các ký tự bao gồm é, è, â... Không biết nếu đó là UTF8 thật nhưng các nhân vật không được đọc sai.
user56reinstatemonica8 30/07/13

12
Xác nhận nhanh - các tệp được tạo bằng phương pháp này trên (Excel cho Mac 2011) không tạo ra UTF-8 csvs, NHƯNG , chúng tạo ra các CSV ít nhất chứa các ký tự chính xác và do đó có thể được chuyển đổi thành UTF8 một cách dễ dàng , đó là một bước tiến lớn từ rác linh tinh lố bịch mà Excel phát sinh theo mặc định.
user56reinstatemonica8 30/07/13

Vâng, đồng ý, điều này cũng hiệu quả với tôi (Excel Mac 2011) và nó thực sự xứng đáng được nâng cấp hơn.
cbmanica

1
Điều này không hiệu quả với tôi (sử dụng Excel 2007). Tôi có 2 ký tự không phải ASCII trong tệp của mình và một trong số chúng được lưu OK theo cách này, còn lại thì không.
EM0

1
Lưu ý rằng tệp CSV kết quả sẽ ở dạng UTF-16, không phải UTF-8 như câu hỏi được hỏi.
Flimm

38

Bạn có thể sử dụng lệnh iconv trong Unix (cũng có sẵn trên Windows dưới dạng libiconv ).

Sau khi lưu dưới dạng CSV dưới Excel trong dòng lệnh, hãy đặt:

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

(hãy nhớ thay thế cp1250 bằng mã hóa của bạn).

Hoạt động nhanh và tuyệt vời cho các tệp lớn như cơ sở dữ liệu mã bưu điện, không thể nhập vào GoogleDocs (giới hạn 400.000 ô).


5
Điều đó là vô ích nếu nội dung của bạn chứa các ký tự không thể được mã hóa vào năm 1250, cách tốt hơn là xuất dưới dạng "Unicode .txt" trong Excel và sử dụng iconv để chuyển đổi từ Utf16. Cũng có thể làm một sedhoặc trđể dịch từ '\ t' sang ','
Sebastian

5
Mã hóa mặc định của Excel dường như là CP858 khi lưu dưới dạng CSV hoặc MS-DOS CSV và Windows 1252 khi lưu dưới dạng Windows CSV (như đã thử nghiệm trên Excel cho Mac 2011).
đất sét

4
Tôi hoàn toàn đồng ý rằng điều này là vô ích, vì khi Excel lưu ở định dạng .csv, nó sẽ mất thông tin khi nói đến các điểm mã Unicode không thể được mã hóa theo mã hóa một byte cho mỗi mã.
Flimm

26

Bạn có thể làm điều này trên một máy Windows hiện đại mà không cần phần mềm của bên thứ ba. Phương pháp này đáng tin cậy và nó sẽ xử lý dữ liệu bao gồm dấu phẩy được trích dẫn, ký tự tab được trích dẫn, ký tự CJK, v.v.

1. Lưu từ Excel

Trong Excel, lưu dữ liệu để file.txtsử dụng loại Unicode Text (*.txt).

2. Khởi động PowerShell

Chạy powershelltừ menu Bắt đầu.

3. Tải tệp trong PowerShell

$data = Import-Csv C:\path\to\file.txt -Delimiter "`t" -Encoding BigEndianUnicode

4. Lưu dữ liệu dưới dạng CSV

$data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation

2
Phương pháp này hoạt động hoàn hảo cho một tệp CSV có hơn 15.000 bản ghi, với các dòng vượt quá giới hạn 1024 ký tự do Notepad áp đặt. Mất vài giây và không sử dụng phần mềm của bên thứ ba. Cảm ơn!
tuyệt đối

Ahh, ngay cả khi tôi đã thử sử dụng Google Sheets, tôi cũng gặp vấn đề tương tự. Vì vậy, có lẽ chiến lược PowerShell này sẽ có hiệu quả. Đây là vấn đề của tôi. Đối với một số ký tự nhất định như biểu tượng cảm xúc nhất định, bạn cần sử dụng CHARACTER SET utf8mb4như được mô tả ở đây: stackoverflow.com/a/10959780/470749
Ryan

1
@Ryan Vấn đề đó là dành riêng cho MySQL. Tôi vừa thử nhân vật có vấn đề trong câu hỏi đó và nó hoạt động tốt trong cả Excel và PowerShell.
Don Cruickshank

24

"Cách dễ dàng" duy nhất để làm điều này là như sau. Đầu tiên, nhận ra rằng có một sự khác biệt giữa những gì được hiển thị và những gì được giấu trong tệp .csv của Excel.

  1. Mở tệp Excel nơi bạn có thông tin (.xls, .xlsx)
  2. Trong Excel, chọn "CSV (Được phân cách bằng dấu phẩy) (* .csv) làm loại tệp và lưu dưới dạng đó.
  3. Trong NOTEPAD (được tìm thấy trong "Chương trình" và sau đó là Phụ kiện trong menu Bắt đầu), hãy mở tệp .csv đã lưu trong Notepad
  4. Sau đó chọn -> Lưu dưới dạng ... và ở dưới cùng của hộp "lưu dưới dạng", có một hộp chọn có nhãn là "Mã hóa". Chọn UTF-8 (KHÔNG sử dụng ANSI hoặc bạn mất tất cả các dấu, v.v.). Sau khi chọn UTF-8, sau đó lưu tệp vào tên tệp hơi khác so với ban đầu.

Tệp này ở dạng UTF-8 và giữ lại tất cả các ký tự và dấu và có thể được nhập, ví dụ, vào MySQL và các chương trình cơ sở dữ liệu khác.

Câu trả lời này được lấy từ diễn đàn này .


9
Điều này không chính xác, vì bước 2, lưu dưới dạng CSV. Vấn đề với điều này là Excel lưu tệp CSV trong cp1252, đây là mã hóa một byte cho mỗi mã. Điều này dẫn đến việc mất thông tin cho các ký tự không thể vừa trong một byte.
Flimm

Nó làm việc cho tôi, nhưng tôi không thể hiểu tại sao. Tệp của tôi được tạo bởi javascript luôn được đọc không chính xác trong excel (dưới dạng mã hóa khác). Nhưng khi tôi mở trong notepad và lưu dưới dạng utf-8, nó hoạt động tốt! Vì vậy, có vẻ như có một siêu dữ liệu với mã hóa. Làm thế nào nó hoạt động? Nếu notepad có thể lưu tệp CSV UTF-8 và Excel có thể đọc chúng, thì trong chương trình của tôi có thể tạo tệp CSV UTF-8 chính xác, Excel có đọc được không?
felipeaf

Đã làm cho tôi. Trong XSLX được chuyển đổi từ Access. Các định dạng Diacritics và chỉ có các định dạng ngày và ISO đều ổn. Một hoặc khác đã không làm việc với các giải pháp phổ biến hơn.
RolfBly

21

Một số khác tôi thấy hữu ích: " Số " cho phép cài đặt mã hóa khi lưu dưới dạng CSV.


8
^ đó là một ứng dụng trong Mac OSX
Snut A.Suk

cũng hãy cẩn thận với Numbers vì nó có giới hạn về số lượng hàng và tôi đã chuyển đổi dữ liệu như thế này trước khi không nhận ra nó đã cắt một số hàng. Excel / CSV có giới hạn cao hơn nhiều.
MrE

14

"nevets1219" đúng về tài liệu của Google, tuy nhiên nếu bạn chỉ "nhập" tệp thì nó thường không chuyển đổi thành UTF-8.

Nhưng nếu bạn nhập CSV vào bảng tính Google hiện có thì nó sẽ chuyển đổi thành UTF-8.

Đây là một công thức:

  • Trên màn hình Tài liệu chính (hoặc Ổ đĩa), nhấp vào nút "Tạo" và chọn "Bảng tính"
  • Từ menu "Tệp", chọn "Nhập"
  • Nhấp vào "Chọn tệp"
  • Chọn "Thay thế bảng tính"
  • Chọn bất kỳ ký tự nào bạn đang sử dụng làm Dấu phân cách
  • Nhấp vào "Nhập"
  • Từ menu "Tệp", chọn "Tải xuống dưới dạng" -> CSV (trang tính hiện tại)

Tệp kết quả sẽ có trong UTF-8


2
Vấn đề với câu trả lời này là cách bạn tạo tệp CSV ở vị trí đầu tiên. Nếu bạn đã làm điều đó bằng cách đơn giản lưu dưới dạng CSV trong Excel, tệp CSV sẽ ở dạng cp1252, đây là mã hóa một byte cho mỗi mã. Điều này sẽ dẫn đến mất thông tin khi nói đến các ký tự không thể vừa trong một byte.
Flimm

Vâng, đó là một vấn đề với bất kỳ câu trả lời. Và sẽ có bất kỳ câu trả lời nào về cách chuyển đổi sang UTF-8 vì không có cách nào để biết hoặc kiểm soát mã hóa ban đầu là gì.
RedYeti

1
Ví dụ, một số câu trả lời nói về cách giải quyết vấn đề đó, ví dụ như stackoverflow.com/a/15500052/247696
Flimm

13

Sử dụng Notepad ++

Điều này sẽ sửa tệp CSV bị hỏng được lưu bởi Excel và lưu lại trong mã hóa thích hợp.

  • Xuất CSV từ Excel
  • Tải vào Notepad ++
  • Sửa mã hóa
  • Tiết kiệm

Excel lưu trong CP-1252 / Windows-1252. Mở tệp CSV trong Notepad ++. Lựa chọn

Encoding > Character Sets > Western European > Windows-1252

Sau đó

Encoding > Convert to UTF-8
File > Save

Đầu tiên hãy nói với Notepad ++ mã hóa, sau đó chuyển đổi. Một số câu trả lời khác đang chuyển đổi mà không đặt mã hóa phù hợp trước, xáo trộn tệp nhiều hơn. Họ sẽ biến những gì nên thành . Nếu nhân vật của bạn không phù hợp với CP-1252 thì nó đã bị mất khi được lưu dưới dạng CSV. Sử dụng một câu trả lời khác cho điều đó.


Tôi có thể hiểu sai, nhưng bạn không thể lưu tệp dưới dạng ".csv" trong Notepad ++ và đó là những gì nó nói về.
Daniel Maurer

1
Có bạn có thể. Bạn chỉ lưu một tệp văn bản và .csvlà một tệp văn bản. Câu trả lời này sẽ mở tệp CSV bị hỏng bởi Excel, sửa nó, sau đó lưu lại với mã hóa phù hợp.
Chloe

Những gì bạn đang truyền đạt có kết quả sâu rộng. Sử dụng phương pháp nổi tiếng này, chúng tôi có thể đạt được chất lượng dữ liệu cao hơn! Bravo! (Câu đố: tại sao bình luận này rất hay?)
thymaro

9

Trong Excel 2016 trở lên (bao gồm Office 365), có một tùy chọn CSV dành riêng cho định dạng UTF-8.

Trong Office 365, hãy lưu dưới dạng; trong đó trước đây người ta có thể đã chọn CSV (Được phân cách bằng dấu phẩy), bây giờ một trong những loại tệp bạn có thể lưu là CSV UTF-8 (Phân cách bằng dấu phẩy) (* .csv)


1
Bạn nên cung cấp một số hướng dẫn về cách sử dụng tùy chọn đó.
rovyko

1
@dexgecko chắc chắn: nó được gọi là nút / menu "Lưu". Hiện tại có bốn loại xuất CSV trong Excel 2016 trên Windows: CSV lưu dưới dạng "ANSI" (ít nhiều tương đương Latin1, nhưng có thể khác với cài đặt hệ điều hành không phải phương Tây, tôi không chắc chắn), CSV UTF-8 lưu dưới dạng UTF-8 với BOM, CSV (DOS) lưu dưới dạng CP850 (một lần nữa, mais có phụ thuộc vào cài đặt không?) và CSV (Mac) lưu dưới dạng MacRoman.

Tuy nhiên, Excel sẽ chỉ có thể đọc các tệp UTF-8 và ANSI CSV (Excel có thể sử dụng BOM để chọn). Để nhập từ mã hóa khác, đổi tên thành .txt, mở từ Excel (sau đó bạn có một danh sách dài các mã hóa để chọn) và vì nó sẽ không giải thích chính xác dấu phân cách, sử dụng nút "convert" để phân chia các hàng. Bạn cũng có thể sử dụng thủ thuật này khi nhập CSV từ một quy ước ngôn ngữ khác (ví dụ: tiếng Pháp, dấu phân cách được nộp là dấu chấm phẩy, vì dấu phẩy đã được sử dụng làm dấu tách thập phân).

1
@ Jean-ClaudeArbaut Lạ, tôi không thấy tùy chọn CSV UTF-8 trong Excel 2016.
rovyko

1
@dexgecko Lạ thật, thật. Theo trang này (bằng tiếng Pháp, xin lỗi), chức năng đã được thêm vào tháng 11 năm 2016, trong phiên bản xây dựng 1610. Hiện tại tôi có phiên bản 1802. Tuy nhiên, tôi nghĩ chỉ Office 365 mới có loại phát triển đó và tôi đang sử dụng Office Pro 2016 (không phải hương vị 365). Có thể thử cập nhật Office của bạn.

8

Đối với những người tìm kiếm một giải pháp hoàn toàn có lập trình (hoặc ít nhất là phía máy chủ), tôi đã thành công lớn khi sử dụng công cụ xls2csv của catdoc.

Cài đặt catdoc:

apt-get install catdoc

Thực hiện chuyển đổi:

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

Điều này là nhanh chóng.

Lưu ý rằng điều quan trọng là bạn bao gồm -d utf-8cờ, nếu không, nó sẽ mã hóa đầu ra theo mặc địnhcp1252 mã hóa và bạn có nguy cơ mất thông tin.

Lưu ý rằng xls2csvcũng chỉ hoạt động với .xlscác tập tin, nó không hoạt động với .xlsxcác tập tin.


Hoặc chọn một mã hóa đầu ra khác nhau, không thể khắc phục sự cố của mọi người bằng một câu trả lời duy nhất :-)
bắt đầu từ 18/03/2016

2
Tôi biết điều đó thật đáng tiếc, nhưng thực tế là câu trả lời này sẽ gây ra vấn đề cho một số người dùng. Thực tế là bạn chỉ từng chạy cái này với các ký tự phù hợp với cp1252 chỉ là may mắn, bạn không đưa ra cảnh báo nào về rủi ro này trong câu trả lời, bạn chỉ nói rằng nó "hoạt động không gặp trở ngại". Bạn đã không được yêu cầu khắc phục sự cố của mọi người, chỉ OP, mà rất nhiều người chia sẻ.
Flimm

1
Có bạn đi, tôi đã sửa vấn đề trong bài trả lời và loại bỏ downvote.
Flimm

7

Điều gì về việc sử dụng Powershell.

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

1
Văn bản của các ký tự tiếng Tây Ban Nha không ascii sẽ được thay đổi từ ký tự gốc tiếng Tây Ban Nha sang chuỗi mã hóa được sử dụng bởi ANSI. Vì vậy, văn bản sẽ không giống với bản gốc.
Jason Williams

7

Cách dễ nhất: Không cần mở văn phòng và tài liệu google

  1. Lưu tệp của bạn dưới dạng "tệp văn bản Unicode";
  2. bây giờ bạn có một tệp văn bản unicode
  3. mở nó bằng "notepad" và "Save as" bằng cách chọn "utf-8" hoặc trang mã khác mà bạn muốn
  4. đổi tên phần mở rộng tập tin từ "txt" thành "csv". Điều này sẽ dẫn đến một tệp csv UTF-8 được phân định bằng tab.
  5. Nếu bạn muốn một tệp được phân tách bằng dấu phẩy , hãy mở csvtệp bạn vừa đổi tên và thay thế tất cả các tab bằng dấu phẩy. Để thực hiện việc này trong Notepad trên Win 10, chỉ cần chọn một trường tab sau đó nhấp Ctrl+H. Trong cửa sổ mở ra, nhập dấu phẩy ,vào trường "Thay thế bằng", sau đó nhấp vào "Thay thế tất cả". Lưu tập tin của bạn. Kết quả sẽ là một tệp csv UTF-8 được phân tách bằng dấu phẩy.

Đừng mở nó với MS-Office nào !!! Bây giờ bạn có một tệp CSV được phân tách bằng tab. Hoặc, một dấu phẩy được phân cách bằng dấu phẩy nếu bạn áp dụng bước số 5.


2
Đối với một tệp được phân định bằng tab, có thể tốt hơn là sử dụng .txttiện ích mở rộng. csv, tức là các tệp được phân tách bằng dấu phẩy, chỉ gây nhầm lẫn.
dof1985

5

Thật buồn cười, cách dễ nhất mà tôi tìm thấy để lưu bảng tính 180 MB của mình vào tệp CSV UTF8 là chọn các ô vào Excel, sao chép chúng và dán nội dung của bảng tạm vào SublimeText.


1
Điều này hoạt động vì Excel cung cấp phiên bản TSV của lựa chọn thông qua bảng tạm. Bạn cũng có thể sử dụng Notepad thay vì SublimeText nhưng chỉ cần nhớ lưu với mã hóa UTF-8 nếu có!
Don Cruickshank


3

Giả sử môi trường Windows, lưu và làm việc với tệp như bình thường trong Excel nhưng sau đó mở tệp Excel đã lưu trong Gnome Gnumeric (miễn phí). Lưu bảng tính của Gnome Gnumeric dưới dạng CSV - dù sao đối với tôi - lưu nó dưới dạng CSV UTF-8.


3

Cách dễ dàng để làm điều đó: tải xuống văn phòng mở ( tại đây ), tải bảng tính và mở tệp excel ( .xlshoặc .xlsx). Sau đó, chỉ cần lưu nó dưới dạng tệp CSV văn bản và một cửa sổ mở ra yêu cầu giữ định dạng hiện tại hoặc lưu dưới định dạng .ODF. chọn "giữ định dạng hiện tại" và trong cửa sổ mới, chọn tùy chọn phù hợp hơn với bạn, theo ngôn ngữ mà tệp của bạn được viết. Đối với ngôn ngữ Tây Ban Nha, chọn Tây Âu ( Windows-1252/ WinLatin 1) và tệp hoạt động tốt. Nếu bạn chọn Unicode ( UTF-8), nó sẽ không hoạt động với các ký tự tiếng Tây Ban Nha.


3
Không có lý do tại sao UTF-8 sẽ không hoạt động với các ký tự Tây Ban Nha.
Flimm

3
  1. Lưu tệp xls (tệp Excel) dưới dạng văn bản Unicode => tệp sẽ được lưu ở định dạng văn bản (.txt)

  2. Thay đổi định dạng từ .txt thành .csv (đổi tên tệp từ XYX.txt thành XYX.csv


3
Điều này không hoạt động vì hướng dẫn của bạn không bao gồm bước cần thiết để chuyển đổi tab thành dấu phẩy trong dữ liệu tệp.
Matthew Rodatus

1
"Văn bản Unicode" của Excel là UTF-16, không phải UTF-8 như được yêu cầu trong câu hỏi.
Flimm

3

Tôi cũng đã gặp phải vấn đề tương tự nhưng có một giải pháp dễ dàng cho việc này.

  1. Mở tệp xlsx của bạn trong Excel 2016 trở lên.
  2. Trong "Lưu dưới dạng", hãy chọn tùy chọn này: "(CSV UTF-8 (Được phân cách bằng dấu phẩy) *. Csv)"

Nó hoạt động hoàn hảo và một tệp csv được tạo có thể được nhập trong bất kỳ phần mềm nào. Tôi đã nhập tệp csv này trong cơ sở dữ liệu SQLITE của mình và nó hoạt động hoàn hảo với tất cả các ký tự unicode còn nguyên vẹn.


Tùy chọn này không có sẵn trong bản sao Excel 2016. Tôi có đang sử dụng phiên bản Office 365 không?
Don Cruickshank

2

Đã đi qua cùng một vấn đề và googled ra bài đăng này. Không ai ở trên làm việc cho tôi. Cuối cùng, tôi đã chuyển đổi Unicode .xls của mình thành .xml (chọn Lưu dưới dạng ... Bảng tính XML 2003) và nó đã tạo ra ký tự chính xác. Sau đó, tôi đã viết mã để phân tích xml và trích xuất nội dung để sử dụng.


2

Tôi đã viết một tập lệnh Python nhỏ có thể xuất bảng tính trong UTF-8.

Bạn chỉ cần cung cấp tệp Excel làm tham số đầu tiên theo sau là các trang tính mà bạn muốn xuất. Nếu bạn không cung cấp trang tính, tập lệnh sẽ xuất tất cả các trang tính có trong tệp 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)

Tôi đã cập nhật việc thực hiện một chút và tạo ra một ý chính gist.github.com/julianthome/2d8546e7bed869079ab0f409ae0faa87
Julian

2

Excel thường lưu tệp csv dưới dạng mã hóa ANSI thay vì utf8.

Một tùy chọn để sửa tệp là sử dụng Notepad hoặc Notepad ++:

  1. Mở .csv bằng Notepad hoặc Notepad ++.
  2. Sao chép nội dung vào clipboard máy tính của bạn.
  3. Xóa nội dung khỏi tập tin.
  4. Thay đổi mã hóa của tập tin thành utf8.
  5. Dán nội dung trở lại từ clipboard.
  6. Lưu các tập tin.

Không chắc chắn về các phiên bản cũ của NP ++, nhưng trong phiên bản hiện tại, bạn chỉ có thể chọn Mã hóa> Chuyển đổi sang UTF-8. thay thế các bước 2-5
Felk

1

Tùy chọn thứ hai cho "nevets1219" là mở tệp CSV của bạn trong Notepad ++ và thực hiện chuyển đổi sang ANSI.

Chọn trong menu trên cùng: Mã hóa -> Chuyển đổi sang Ansi


Không có lý do tại sao bạn bị hạ cấp. Notepad ++ đã làm điều đó cho tôi. Không thể lưu trữ tệp của tôi trong Bảng tính Google vì nó là bí mật.
Zane

3
Vấn đề với câu trả lời này là cách bạn tạo tệp CSV ở vị trí đầu tiên. Nếu bạn chỉ lưu dưới dạng CSV từ Excel, mã hóa sẽ là cp1252, đây là mã hóa một byte cho mỗi mã, và do đó sẽ mất thông tin cho các ký tự không phù hợp với điều đó. Ngoài ra, cuối cùng, bạn nên chuyển đổi sang UTF-8 chứ không phải Ansi, nếu bạn muốn làm những gì câu hỏi yêu cầu.
Flimm

Đây là câu trả lời dễ dàng hơn IMO. Tôi đang sử dụng Excel 2016 và thấy nó lưu vào mã hóa ANSI theo mặc định, nhưng đã đưa nó vào UTF-8, đó là điều tôi muốn.
rovyko

1

Mã hóa -> Chuyển đổi sang Ansi sẽ mã hóa nó trong ANSI / UNICODE. Utf8 là một tập hợp con của Unicode. Có lẽ trong ANSI sẽ được mã hóa chính xác, nhưng ở đây chúng ta đang nói về UTF8, @SequenceDigitale.

Có nhiều cách nhanh hơn, như xuất dưới dạng csv (được phân cách bằng dấu phẩy) và sau đó, mở csv đó bằng Notepad ++ (miễn phí), sau đó Mã hóa> Chuyển đổi sang UTF8. Nhưng chỉ khi bạn phải làm điều này một lần cho mỗi tệp. Nếu bạn cần thay đổi và xuất đầy đủ, thì tốt nhất là giải pháp LibreOffice hoặc GDocs.


5
"Utf8 là một tập hợp con của Unicode": điều này vô nghĩa. UTF-8 là một mã hóa Unicode.
jameshfisher

Tôi không chắc mình có thể tìm thấy tùy chọn "Mã hóa -> Chuyển đổi sang Ansi" này.
Flimm

Đơn giản chỉ là một csv ANSI trong Notepad ++ và thay đổi mã hóa tệp thành utf8 làm cho các ký tự tiếng Tây Ban Nha không phải ascii ban đầu được chuyển đổi thành các chuỗi mã hóa không khớp với văn bản gốc.
Jason Williams

1

Microsoft Excel có một tùy chọn để xuất bảng tính bằng mã hóa Unicode. Xem ảnh chụp màn hình sau đây.

nhập mô tả hình ảnh ở đây


14
"Văn bản Unicode" lưu trong UTF-16 LE (Little Endian), không phải trong UTF-8 như OP yêu cầu.
rìu.

Có, nhưng đó là cách tốt nhất để nhận hỗ trợ Unicode cho các giá trị x tách biệt của bạn trong Excel. Tôi đã có đủ loại vấn đề khi cố gắng để Excel chơi bóng với UTF-8! Đọc thêm
mcNux

1

mở .csv tốt với notepad ++. nếu bạn thấy mã hóa của mình tốt (bạn sẽ thấy tất cả các ký tự như vậy) hãy nhấn mã hóa, sau đó chuyển đổi sang ANSI khác - tìm hiểu mã hóa hiện tại của bạn là gì


điều đó làm việc cho tôi .. có vấn đề với các ký tự Hy Lạp khi exportmysql db dưới dạng csv và nhập nó vào excel ..
nikolas

1
Vấn đề với điều này là cách bạn tạo tệp CSV ở vị trí đầu tiên. Nếu bạn chỉ lưu dưới dạng tệp CSV trong Excel, nó sẽ lưu nó trong cp1252, đây là mã hóa một byte cho mỗi mã, và do đó mất thông tin.
Flimm

1

Một giải pháp khác là mở tệp bằng winword và lưu nó dưới dạng txt và sau đó mở lại bằng excel và nó sẽ hoạt động với ISA


1

Lưu hộp thoại> Nút công cụ> Tùy chọn web> Tab mã hóa


Điều này không làm việc cho tôi. Theo cách tôi hiểu, nó chỉ có hiệu lực khi lưu dưới dạng định dạng web (HTML, v.v.), chứ không phải khi lưu dưới dạng CSV.
jogojapan

Làm việc cho tôi - office 2007
Elia Weiss

không làm việc trên office 2010 chọn bất kỳ hồ sơ CSV nào.
Hart

0

Tôi có cùng một vấn đề và gặp phải phần bổ sung này , và nó hoạt động hoàn toàn tốt trong excel 2013 bên cạnh excel 2007 và 2010 mà nó được đề cập.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.