Saya secara terprogram mengekspor data (menggunakan PHP 5.2) ke dalam file uji .csv.
Contoh data: Numéro 1
(perhatikan aksen e). Data tersebut utf-8
(tidak ada BOM yang diawali).
Ketika saya membuka file ini di MS Excel ditampilkan sebagai Numéro 1
.
Saya dapat membuka ini di editor teks (UltraEdit) yang menampilkannya dengan benar. UE melaporkan karakternya decimal 233
.
Bagaimana saya bisa mengekspor data teks dalam file .csv sehingga MS Excel akan merendernya dengan benar , lebih disukai tanpa memaksakan penggunaan panduan impor, atau pengaturan panduan non-default?
excel
encoding
csv
diacritics
Freddo411
sumber
sumber
Jawaban:
File UTF8 yang diformat dengan benar dapat memiliki Byte Order Mark sebagai tiga oktet pertama. Ini adalah nilai hex 0xEF, 0xBB, 0xBF. Oktet ini berfungsi untuk menandai file sebagai UTF8 (karena mereka tidak relevan sebagai informasi "byte order"). 1 Jika BOM ini tidak ada, konsumen / pembaca dibiarkan untuk menyimpulkan jenis penyandian teks. Pembaca yang tidak mampu UTF8 akan membaca byte sebagai beberapa penyandian lain seperti Windows-1252 dan menampilkan karakter

pada awal file.Ada bug yang diketahui di mana Excel, saat membuka file CSF UTF8 melalui asosiasi file, mengasumsikan bahwa mereka berada dalam pengkodean byte tunggal, mengabaikan keberadaan BOM UTF8. Ini tidak dapat diperbaiki oleh codepage atau pengaturan bahasa default sistem. BOM tidak akan tahu di Excel - itu tidak akan berfungsi. (Laporan minoritas mengklaim bahwa BOM terkadang memicu wizard "Impor Teks"). Bug ini tampaknya ada di Excel 2003 dan sebelumnya. Sebagian besar laporan (di tengah jawaban di sini) mengatakan bahwa ini diperbaiki di Excel 2007 dan yang lebih baru.
Perhatikan bahwa Anda selalu dapat * dengan benar membuka file UTF8 CSV di Excel menggunakan wizard "Impor Teks", yang memungkinkan Anda menentukan enkode file yang Anda buka. Tentu saja ini jauh lebih tidak nyaman.
Pembaca jawaban ini kemungkinan besar dalam situasi di mana mereka tidak mendukung Excel <2007, tetapi mengirim teks UTF8 mentah ke Excel, yang salah menafsirkannya dan menaburkan teks Anda dengan
Ã
dan karakter Windows-1252 serupa lainnya. Menambahkan BOM UTF8 mungkin adalah perbaikan terbaik dan tercepat Anda.Jika Anda terjebak dengan pengguna pada Excels yang lebih lama, dan Excel adalah satu-satunya konsumen CSV Anda, Anda dapat mengatasinya dengan mengekspor UTF16 alih-alih UTF8. Excel 2000 dan 2003 akan klik dua kali-buka ini dengan benar. (Beberapa editor teks lain dapat memiliki masalah dengan UTF16, jadi Anda mungkin harus mempertimbangkan pilihan Anda dengan cermat.)
* Kecuali jika Anda tidak bisa, (setidaknya) Excel 2011 untuk Wisaya Impor Mac sebenarnya tidak selalu berfungsi dengan semua penyandian, terlepas dari apa yang Anda katakan. </anecdotal-evidence> :)
sumber

di sel pertama; atau sesuatu yang lain sama sekali.
). Ini hanya membantu menebak algoritma, dan untuk format file yang secara khusus membuat kelonggaran untuk itu (misalnya XML). Kelemahan untuk memasukkan BOM palsu dalam file UTF-8 adalah Anda mematahkan kompatibilitas ASCII mereka (titik penjualan utama untuk UTF-8) Banyak alat bantu penyandian-pengabaian teks akan pecah dihadapkan dengan BOM faux-terkemuka terkemuka yang tidak terduga.Membebani BOM (\ uFEFF) berhasil untuk saya (Excel 2007), karena Excel mengenali file tersebut sebagai UTF-8. Kalau tidak, menyimpannya dan menggunakan wizard impor berfungsi, tetapi kurang ideal.
sumber
\ufeff
adalah BOM UTF-16 (BE) bukan BOM UTF-8Di bawah ini adalah kode PHP yang saya gunakan dalam proyek saya ketika mengirim Microsoft Excel ke pengguna:
DIPERBARUI: Peningkatan nama file dan BUG memperbaiki perhitungan panjang yang benar. Terima kasih untuk TRiG dan @ ivanhoe011
sumber
'Content-Disposition: attachment; filename="'.$filename.'.csv"'
karena Firefox ingin tanda kutip ganda, atau jika tidak maka akan memotong nama file Anda setelah spasi.text/csv
) tetapi menyebutnya Excel (application/vnd.ms-excel
)?header('Content-Length: '. mb_strlen($encoded_csv, 'UTF-16LE'));
?Jawaban untuk semua kombinasi versi Excel (2003 + 2007) dan tipe file
Sebagian besar jawaban lain di sini hanya menyangkut versi Excel mereka dan tidak akan selalu membantu Anda, karena jawaban mereka mungkin tidak benar untuk versi Excel Anda.
Misalnya, menambahkan karakter BOM menimbulkan masalah dengan pengenalan pemisah kolom otomatis, tetapi tidak dengan setiap versi Excel.
Ada 3 variabel yang menentukan apakah itu berfungsi di sebagian besar versi Excel:
Seseorang yang tabah di SAP mencoba setiap kombinasi dan melaporkan hasilnya. Hasil akhir? Gunakan UTF16le dengan BOM dan karakter tab sebagai pemisah agar berfungsi di sebagian besar versi Excel.
Kamu tidak percaya padaku? Saya juga tidak akan, tetapi baca di sini dan menangis: http://wiki.sdn.sap.com/wiki/display/ABAP/CSV+tests+of+encoding+and+column+separator
sumber
sep=,
atau apa pun yang ingin Anda gunakan? Jika Anda sudah menambahkan BOM, saya berasumsi Anda tidak segan menambahkan barang ke file.pilih pengkodean UTF-8 saat mengimpor. jika Anda menggunakan Office 2007 ini adalah tempat Anda memilihnya: tepat setelah Anda membuka file.
sumber
Echo UTF-8 BOM sebelum mengeluarkan data CSV. Ini memperbaiki semua masalah karakter di Windows tetapi tidak berfungsi untuk Mac.
Ini berfungsi untuk saya karena saya perlu membuat file yang hanya akan digunakan pada PC Windows.
sumber
UTF-8 tidak bekerja untuk saya di kantor 2007 tanpa paket layanan apa pun, dengan atau tanpa BOM (U + ffef atau 0xEF, 0xBB, 0xBF, tidak berfungsi) menginstal sp3 membuat UTF-8 berfungsi ketika 0xEF, 0xBB, 0xBF BOM adalah didahulukan.
UTF-16 bekerja ketika pengkodean dalam python menggunakan "utf-16-le" dengan 0xff 0xef BOM yang diawali, dan menggunakan tab sebagai pemisah. Saya harus menulis BOM secara manual, dan kemudian menggunakan "utf-16-le" daripada "utf-16", jika tidak masing-masing menyandikan BOM untuk setiap baris yang dituliskan yang muncul sebagai sampah di kolom pertama baris kedua dan sesudahnya.
tidak dapat memastikan apakah UTF-16 akan berfungsi tanpa sp diinstal, karena saya tidak dapat kembali sekarang. mendesah
Ini di windows, tidak tahu tentang kantor untuk MAC.
untuk kedua kasus yang berfungsi, impor berfungsi saat meluncurkan unduhan langsung dari browser dan panduan impor teks tidak mengganggu, berfungsi seperti yang Anda harapkan.
sumber
Seperti yang dikatakan Fregal, \ uFEFF adalah caranya.
sumber
Saya juga memperhatikan bahwa pertanyaan itu "dijawab" beberapa waktu lalu, tetapi saya tidak mengerti cerita yang mengatakan Anda tidak dapat membuka file csv yang dikodekan utf8 dengan sukses di Excel tanpa menggunakan wizard teks.
Pengalaman saya yang dapat direproduksi: Ketik
Old MacDonald had a farm,ÈÌÉÍØ
ke Notepad, tekan Enter, lalu Save As (menggunakan opsi UTF-8).Menggunakan Python untuk menunjukkan apa yang sebenarnya ada di sana:
Baik. Notepad telah menempatkan BOM di bagian depan.
Sekarang masuk ke Windows Explorer, klik dua kali pada nama file, atau klik kanan dan gunakan "Buka dengan ...", dan muncul Excel (2003) dengan tampilan seperti yang diharapkan.
sumber
open('oldmac.csv', 'rb').read()
untuk memverifikasi input Anda?Anda dapat menyimpan file html dengan ekstensi 'xls' dan aksen akan berfungsi (setidaknya 2007).
Contoh: simpan ini (menggunakan Save As utf8 di Notepad) sebagai test.xls:
sumber
border="1"
ke meja, Anda lakukan mendapatkan garis, tetapi hanya sekitar 4 sel :)Ini hanya masalah pengkodean karakter. Sepertinya Anda mengekspor data Anda sebagai UTF-8: é di UTF-8 adalah urutan dua byte 0xC3 0xA9, yang bila ditafsirkan dalam Windows-1252 adalah à ©. Saat Anda mengimpor data ke Excel, pastikan untuk memberi tahu bahwa pengkodean karakter yang Anda gunakan adalah UTF-8.
sumber
Format CSV diimplementasikan sebagai ASCII, bukan unicode, di Excel, sehingga membingungkan para diakritik. Kami mengalami masalah yang sama yaitu bagaimana saya melacak bahwa standar CSV resmi didefinisikan sebagai berbasis ASCII di Excel.
sumber
Excel 2007 membaca dengan benar UTF-8 dengan BOM (EF BB BF) yang dikodekan csv.
Excel 2003 (dan mungkin sebelumnya) membaca UTF-16LE dengan BOM (FF FE), tetapi dengan TAB bukan koma atau titik koma.
sumber
Saya hanya bisa mendapatkan CSV untuk mem-parse dengan benar di Excel 2007 sebagai UTF-16 little-endian yang dipisahkan-tab dimulai dengan tanda urutan byte yang tepat.
sumber
Menulis BOM ke file CSV keluaran benar-benar bekerja untuk saya di Django:
Untuk info lebih lanjut http://crashcoursing.blogspot.com/2011/05/exporting-csv-with-special-characters.html Terima kasih kawan!
sumber
printWriter.print('\ufeff')
, lihat juga Cara menambahkan BOM UTF-8 di java .Solusi lain yang saya temukan hanyalah mengkodekan hasilnya sebagai Windows Code Page 1252 (Windows-1252 atau CP1252). Ini akan dilakukan, misalnya dengan mengatur secara
Content-Type
tepat untuk sesuatu sepertitext/csv; charset=Windows-1252
dan mengatur pengkodean karakter dari aliran respons yang sama.sumber
Perhatikan bahwa memasukkan BOM UTF-8 tidak selalu merupakan ide yang baik - versi Mac dari Excel mengabaikannya dan benar-benar akan menampilkan BOM sebagai ASCII ... tiga karakter jahat di awal bidang pertama di spreadsheet Anda ...
sumber
'\uFEFF' + myCsvString
karya seperti yang diharapkan pada Mac Excel 15.19.1 (2016).Periksa penyandian di mana Anda membuat file, untuk membuat excel menampilkan file dengan benar, Anda harus menggunakan codepage default sistem.
Bahasa Wich yang Anda gunakan? jika .Net, Anda hanya perlu menggunakan Encoding.Default saat membuat file.
sumber
Jika Anda memiliki kode lawas di vb.net seperti yang saya miliki, kode berikut ini berfungsi untuk saya:
sumber
Saya telah menemukan cara untuk menyelesaikan masalah. Ini adalah hack jahat tetapi berfungsi: buka doc dengan Open Office , lalu simpan ke dalam format excel; yang dihasilkan
.xls
atau.xlsx
akan menampilkan karakter yang ditekankan.sumber
Dengan Ruby 1.8.7 saya menyandikan setiap bidang ke UTF-16 dan membuang BOM (mungkin).
Kode berikut diekstrak dari active_scaffold_export:
Garis yang penting adalah:
sumber
buka file csv dengan notepad ++ clic pada Encode, pilih convert to UTF-8 (not convert to UTF-8 (tanpa BOM)) Simpan open by double clic dengan excel Harapan yang membantu Christophe GRISON
sumber