Saya sedang mengembangkan bagian dari aplikasi yang bertanggung jawab untuk mengekspor beberapa data ke file CSV. Aplikasi ini selalu menggunakan UTF-8 karena sifat multibahasa di semua tingkatan. Tetapi membuka file CSV seperti itu (mengandung misalnya diakritik, huruf cyrillic, huruf Yunani) di Excel tidak mencapai hasil yang diharapkan seperti sesuatu Г„/Г¤, Г–/Г¶
. Dan saya tidak tahu bagaimana memaksa Excel memahami bahwa file CSV terbuka dikodekan dalam UTF-8. Saya juga mencoba menentukan UTF-8 BOM EF BB BF
, tetapi Excel mengabaikannya.
Apakah ada solusi?
PS Alat apa yang berpotensi berperilaku seperti Excel?
MEMPERBARUI
Saya harus mengatakan bahwa saya telah membingungkan komunitas dengan rumusan pertanyaan. Ketika saya mengajukan pertanyaan ini, saya meminta cara membuka file UTF-8 CSV di Excel tanpa masalah bagi pengguna, dengan cara yang lancar dan transparan. Namun, saya menggunakan formulasi yang salah meminta untuk melakukannya secara otomatis . Itu sangat membingungkan dan bertentangan dengan otomatisasi makro VBA. Ada dua jawaban untuk pertanyaan ini yang paling saya hargai: jawaban pertama oleh Alex https://stackoverflow.com/a/6002338/166589 , dan saya telah menerima jawaban ini; dan yang kedua oleh Mark https://stackoverflow.com/a/6488070/166589yang muncul sedikit kemudian. Dari sudut pandang kegunaan, Excel tampaknya tidak memiliki dukungan UTF-8 CSV yang ramah pengguna, jadi saya menganggap kedua jawaban itu benar, dan saya telah menerima jawaban Alex terlebih dahulu karena benar-benar menyatakan bahwa Excel tidak dapat melakukan secara transparan. Itulah yang saya bingung secara otomatis di sini. Jawaban Mark mempromosikan cara yang lebih rumit bagi pengguna yang lebih maju untuk mencapai hasil yang diharapkan. Kedua jawaban itu bagus, tetapi jawaban Alex cocok dengan pertanyaan saya yang tidak jelas sedikit lebih baik.
PEMBARUAN 2
Lima bulan kemudian setelah pengeditan terakhir, saya perhatikan bahwa jawaban Alex telah hilang karena suatu alasan. Saya benar-benar berharap itu bukan masalah teknis dan saya berharap tidak ada lagi diskusi tentang jawaban mana yang lebih besar sekarang. Jadi saya menerima jawaban Mark sebagai yang terbaik.
\t
sebagai pembatas. Akan bekerja dalam pengaturan Excel Bahasa Inggris dan bukan Bahasa Inggris. Dapat menekanCtrl-S
tanpa memilih format file, dll. Akan mempertahankan karakter Unicode.Jawaban:
Alex benar, tetapi karena Anda harus mengekspor ke csv, Anda dapat memberikan saran ini kepada pengguna saat membuka file csv:
Dengan cara ini karakter khusus akan ditampilkan dengan benar.
sumber
Penanda urutan-Byte UTF-8 akan memberi petunjuk pada Excel 2007+ bahwa Anda menggunakan UTF-8. (Lihat posting SO ini ).
Jika ada yang mengalami masalah yang sama dengan saya, kelas pengkodean .NET's UTF8 tidak menampilkan penanda byte-order dalam
GetBytes()
panggilan. Anda perlu menggunakan stream (atau menggunakan solusi ) untuk mendapatkan output BOM.sumber
UTF-8
keUTF-8 with BOM
Bug dengan BOM yang diabaikan tampaknya diperbaiki untuk Excel 2013. Saya punya masalah yang sama dengan huruf Cyrillic, tetapi menambahkan karakter BOM
\uFEFF
memang membantu.sumber
$utf8_with_bom = chr(239) . chr(187) . chr(191) . $csvText
:;Sungguh luar biasa bahwa ada begitu banyak jawaban tetapi tidak ada yang menjawab pertanyaan:
Jawaban yang ditandai sebagai jawaban yang diterima dengan 200+ suara-up tidak berguna bagi saya karena saya tidak ingin memberikan pengguna saya manual cara mengkonfigurasi Excel. Terlepas dari itu: manual ini akan berlaku untuk satu versi Excel tetapi versi Excel lainnya memiliki menu dan dialog konfigurasi yang berbeda. Anda membutuhkan manual untuk setiap versi Excel.
Jadi pertanyaannya adalah bagaimana membuat Excel memperlihatkan data UTF8 dengan klik ganda sederhana?
Yah setidaknya di Excel 2007 ini tidak mungkin jika Anda menggunakan file CSV karena BOM UTF8 diabaikan dan Anda hanya akan melihat sampah. Ini sudah menjadi bagian dari pertanyaan Lyubomyr Shaydariv:
Saya membuat pengalaman yang sama: Menulis data Rusia atau Yunani ke file UTF8 CSV dengan BOM menghasilkan sampah di Excel:
Konten file UTF8 CSV:
Hasil di Excel 2007:
Solusinya adalah tidak menggunakan CSV sama sekali. Format ini diterapkan secara bodoh oleh Microsoft sehingga tergantung pada pengaturan wilayah di panel kontrol jika koma atau titik koma digunakan sebagai pemisah. Jadi file CSV yang sama dapat dibuka dengan benar di satu komputer tetapi di komputer anter tidak. "CSV" berarti " Nilai Terpisah Koma " tetapi misalnya pada Windows Jerman dengan titik koma default harus digunakan sebagai pemisah sementara koma tidak berfungsi. (Di sini harus dinamai SSV = Nilai Terpisah Titik Koma) File CSV tidak dapat dipertukarkan antara versi bahasa Windows yang berbeda. Ini adalah masalah tambahan untuk masalah UTF-8.
Excel ada sejak puluhan tahun. Sangat memalukan bahwa Microsoft tidak dapat mengimplementasikan hal mendasar seperti impor CSV selama ini.
Namun, jika Anda memasukkan nilai yang sama ke file HTML dan menyimpan file itu sebagai file UTF8 dengan BOM dengan ekstensi file XLS Anda akan mendapatkan hasil yang benar.
Isi file UTF8 XLS:
Hasil di Excel 2007:
Anda bahkan dapat menggunakan warna dalam HTML yang akan ditampilkan dengan benar oleh Excel.
Hasil di Excel 2007:
Dalam hal ini hanya tabel itu sendiri yang memiliki batas dan garis hitam. Jika Anda ingin SEMUA sel menampilkan garis kisi, ini juga dimungkinkan dalam HTML:
Kode ini bahkan memungkinkan untuk menentukan nama lembar kerja (di sini "MySuperSheet")
Hasil di Excel 2007:
sumber
Kami telah menggunakan solusi ini:
sumber
Punya masalah yang sama dengan file CSV yang dihasilkan PHP. Excel mengabaikan BOM ketika Pemisah didefinisikan melalui
"sep=,\n"
di awal konten (tapi tentu saja setelah BOM).Jadi menambahkan BOM (
"\xEF\xBB\xBF"
) di awal konten dan mengatur titik koma sebagai pemisah viafputcsv($fh, $data_array, ";");
do the trick.sumber
Saya memiliki masalah yang sama di masa lalu (cara menghasilkan file yang dapat dibaca Excel, dan alat lain juga bisa membaca). Saya menggunakan TSV daripada CSV, tetapi masalah yang sama dengan pengkodean muncul.
Saya gagal menemukan cara apa pun untuk membuat Excel mengenali UTF-8 secara otomatis, dan saya tidak mau / dapat memberikan kepada konsumen file-file tersebut instruksi rumit bagaimana cara membukanya. Jadi saya menyandikannya sebagai UTF-16le (dengan BOM), bukan UTF-8. Dua kali ukuran, tetapi Excel dapat mengenali pengkodean. Dan mereka kompres dengan baik, jadi ukurannya jarang (tapi sayangnya tidak pernah) penting.
sumber
Pertanyaan lama tetapi, solusi paling sederhana adalah:
sumber
Seperti yang saya posting di http://thinkinginsoftware.blogspot.com/2017/12/correctly-generate-csv-that-excel-can.html :
Beri tahu pengembang perangkat lunak yang bertanggung jawab membuat CSV untuk memperbaikinya. Sebagai solusi cepat, Anda dapat menggunakan gsed untuk memasukkan UTF-8 BOM di awal string:
Perintah ini memasukkan BOM UTF-4 jika tidak ada. Karena itu, ini adalah perintah idempoten. Sekarang Anda harus dapat mengklik dua kali file dan membukanya di Excel.
sumber
Anda dapat mengonversi file .csv ke UTF-8 dengan BOM melalui Notepad ++:
Encoding
→Convert to UTF-8
.File
→Save
.Bekerja di Microsoft Excel 2013 (15.0.5093.1000) MSO (15.0.5101.1000) 64-bit dari Microsoft Office Professional Plus 2013 pada Windows 8.1 dengan lokal untuk program non-Unicode diatur ke "Jerman (Jerman)".
sumber
Vba makro sederhana untuk membuka teks utf-8 dan file csv
Asal: = 65001 adalah UTF-8. Koma: Benar untuk file .csv yang didistribusikan dalam kolom
Simpan di Personal.xlsb agar selalu tersedia. Personalisasi excel toolbar menambahkan tombol panggilan makro dan membuka file dari sana. Anda dapat menambahkan lebih banyak format ke makro, seperti kolom autofit, perataan, dll.
sumber
Hanya untuk membantu pengguna yang tertarik membuka file di Excel yang mencapai utas ini seperti saya.
Saya telah menggunakan wizard di bawah ini dan bekerja dengan baik untuk saya, mengimpor file UTF-8. Tidak transparan, tetapi bermanfaat jika Anda sudah memiliki file.
Sumber: https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0
sumber
Ya, ini mungkin. Seperti yang sebelumnya dicatat oleh banyak pengguna, tampaknya ada masalah dengan excel membaca Byte Order Mark yang benar ketika file dikodekan dalam UTF-8. Dengan UTF-16 sepertinya tidak memiliki masalah, sehingga endemik ke UTF-8. Solusi yang saya gunakan untuk ini adalah menambahkan BOM, DUA KALI. Untuk ini saya menjalankan perintah sed berikut dua kali:
, di mana wildcard dapat diganti dengan nama file apa pun. Namun, ini mengarah ke mutasi dari sep = di awal file .csv. File .csv kemudian akan terbuka secara normal di excel, tetapi dengan baris tambahan dengan "sep =" di sel pertama. "Sep =" juga dapat dihapus di sumber .csv itu sendiri, tetapi ketika membuka file dengan VBA pembatas harus ditentukan:
Format 6 adalah format .csv. Setel Lokal ke true, jika ada tanggal dalam file. Jika Lokal tidak disetel ke true, tanggal akan di Amerikanisasi, yang dalam beberapa kasus akan merusak format .csv.
sumber
Ini solusi kerja saya:
Kuncinya adalah Asal: = 65001
sumber
Ya itu mungkin. Saat menulis aliran yang menciptakan csv, hal pertama yang harus dilakukan adalah ini:
sumber
Daftar jawaban yang benar-benar menakjubkan, tetapi karena satu yang cukup bagus masih belum ada, saya akan menyebutkannya di sini: buka file csv dengan google sheets dan simpan kembali ke komputer lokal Anda sebagai file excel.
Berbeda dengan Microsoft, Google telah berhasil mendukung file csv UTF-8 sehingga hanya berfungsi untuk membuka file di sana. Dan format ekspor ke excel juga berfungsi. Jadi, meskipun ini mungkin bukan solusi yang disukai untuk semua, itu cukup gagal aman dan jumlah klik tidak setinggi kedengarannya, terutama ketika Anda sudah masuk ke google.
sumber
Ini tidak secara akurat menjawab pertanyaan ini tetapi karena saya menemukan ini dan solusi di atas tidak bekerja untuk saya atau memiliki persyaratan yang tidak dapat saya penuhi, berikut adalah cara lain untuk menambahkan BOM ketika Anda memiliki akses ke vim:
sumber
hai saya menggunakan ruby on rails untuk generasi csv. Dalam aplikasi kami, kami berencana untuk menggunakan multi bahasa (I18n) dan kami menghadapi masalah saat melihat konten I18n dalam file CSV windows excel.
Baik-baik saja dengan Linux (Ubuntu) dan mac.
Kami mengidentifikasi bahwa windows excel perlu mengimpor data lagi untuk melihat data aktual. Saat mengimpor kita akan mendapatkan lebih banyak opsi untuk memilih rangkaian karakter.
Tetapi ini tidak dapat dididik untuk setiap pengguna, jadi solusi yang kami cari adalah membuka hanya dengan klik dua kali.
Kemudian kami mengidentifikasi cara menampilkan data dengan mode terbuka dan lahir di windows excel dengan bantuan aghuddleston intisari . Ditambahkan pada referensi.
Contoh konten I18n
Di Mac dan Linux
Swedia: Förnamn Inggris: Nama depan
Di Windows
Swedia: Förnamn Inggris: Nama depan
Hal penting yang perlu diperhatikan di sini adalah mode terbuka dan lahir
open_mode = "w +: UTF-16LE: UTF-8"
bom = "\ xEF \ xBB \ xBF"
Sebelum menulis BOM sisipkan CSV
f.Write menulis
f.write (csv_file)
Windows dan Mac
File dapat dibuka langsung dengan mengklik dua kali.
Linux (ubuntu)
Saat membuka file, minta opsi pemisah -> pilih “TAB”
sumber
Saya menghadapi masalah yang sama beberapa hari yang lalu, dan tidak dapat menemukan solusi karena saya tidak dapat menggunakan
import from csv
fitur ini karena itu membuat semuanya ditata sebagai string.Solusi saya adalah pertama-tama membuka file dengan notpad ++ dan
change the encode to ASCII
. Kemudian baru saja membuka file dalam excel dan itu berfungsi seperti yang diharapkan.sumber
Di php Anda hanya menambahkan $ lahir ke $ csv_string Anda:
Diuji dengan MS Excel 2016, php 7.2.4
sumber
Ini adalah pertanyaan lama tapi saya baru saja mengalami masalah serupa dan solusinya dapat membantu orang lain:
Punya masalah yang sama ketika menulis data teks CSV ke file, kemudian membuka .csv yang dihasilkan di Excel menggeser semua teks ke dalam satu kolom. Setelah membaca jawaban di atas, saya mencoba yang berikut, yang sepertinya menyelesaikan masalah.
Terapkan pengkodean UTF-8 saat Anda membuat StreamWriter Anda. Itu dia.
Contoh:
sumber
Close()
dalamDispose
tumpukan tetapi di sana kita pergi. Anda juga salah dalam pernyataan Anda tentang impor CSV menjadi primitif karena tidak memerlukan pendekatan HTML yang tidak efisien yang Anda sarankan. Bahkan membuat langkah-langkah programatik tambahan untuk mengambil data teks biasa, mentransformasikannya ke dalam HTML lalu menariknya ke Excel tampaknya berlawanan dengan intuisiJika Anda ingin membuatnya sepenuhnya otomatis, satu klik, atau memuat secara otomatis ke Excel dari mengatakan halaman web, tetapi tidak dapat menghasilkan file Excel yang tepat, maka saya akan menyarankan melihat format SYLK sebagai alternatif. OK itu tidak sesederhana CSV tetapi berbasis teks dan sangat mudah diimplementasikan dan mendukung UTF-8 tanpa masalah.
Saya menulis kelas PHP yang menerima data dan mengeluarkan file SYLK yang akan terbuka langsung di Excel hanya dengan mengklik file (atau akan meluncurkan otomatis Excel jika Anda menulis file ke halaman web dengan tipe mime yang benar. Anda bahkan dapat tambahkan pemformatan (seperti huruf tebal, format angka dengan cara tertentu, dll.) dan ubah ukuran kolom, atau kolom ukuran otomatis ke teks dalam kolom dan semuanya mungkin tidak lebih dari 100 baris.
Sangatlah mudah untuk merekayasa balik SYLK dengan membuat spreadsheet sederhana dan menyimpan sebagai SYLK dan kemudian membacanya dengan editor teks. Blok pertama adalah header dan format angka standar yang akan Anda kenali (yang baru saja Anda regurgitasi di setiap file yang Anda buat), maka data hanyalah koordinat X / Y dan sebuah nilai.
sumber
sumber
Saya menghasilkan file csv dari aplikasi C # sederhana dan memiliki masalah yang sama. Solusi saya adalah memastikan file tersebut ditulis dengan pengkodean UTF8, seperti:
Saya awalnya memiliki kode berikut, dengan aksen yang terlihat bagus di Notepad ++ tetapi semakin rusak di Excel:
Jarak tempuh Anda mungkin bervariasi - Saya menggunakan .NET 4 dan Excel dari Office 365.
sumber
Solusi yang berfungsi untuk kantor 365
UTF-16
(tanpa LE, BE)\t
Kode dalam PHP
sumber
Pertama-tama simpan spreadsheet Excel sebagai teks Unicode. Buka file TXT menggunakan Internet explorer dan klik "Simpan sebagai" Pengkodean TXT - pilih pengkodean yang sesuai, yaitu untuk Win Cyrillic 1251
sumber
Saya mencoba semua yang saya bisa temukan di utas ini dan yang serupa, tidak ada yang bekerja sepenuhnya. Namun, mengimpor ke lembar google dan hanya mengunduh karena csv bekerja seperti pesona. Cobalah jika Anda sampai pada titik frustrasi saya.
sumber