Saya punya hal yang sangat sederhana ini yang hanya mengeluarkan beberapa hal dalam format CSV, tetapi haruslah UTF-8. Saya membuka file ini di TextEdit atau TextMate atau Dreamweaver dan menampilkan karakter UTF-8 dengan benar, tetapi jika saya membukanya di Excel itu melakukan hal konyol ini. Inilah yang saya dapatkan di kepala dokumen saya:
header("content-type:application/csv;charset=UTF-8");
header("Content-Disposition:attachment;filename=\"CHS.csv\"");
Ini semua tampaknya memiliki efek yang diinginkan kecuali Excel (Mac, 2008) tidak ingin mengimpornya dengan benar. Tidak ada opsi di Excel bagi saya untuk "terbuka sebagai UTF-8" atau apa pun, jadi ... Saya agak kesal.
Sepertinya saya tidak dapat menemukan solusi yang jelas untuk ini di mana saja, meskipun banyak orang memiliki masalah yang sama. Hal yang paling saya lihat adalah memasukkan BOM, tapi saya tidak tahu bagaimana melakukannya. Seperti yang Anda lihat di atas, saya hanya echo
memasukkan data ini, saya tidak menulis file apa pun. Saya bisa melakukan itu jika perlu, saya hanya tidak karena sepertinya tidak ada kebutuhan untuk saat ini. Ada bantuan?
Pembaruan: Saya mencoba menggemakan BOM echo pack("CCC", 0xef, 0xbb, 0xbf);
yang baru saja saya tarik dari situs yang mencoba mendeteksi BOM. Tetapi Excel hanya menambahkan ketiga karakter tersebut ke sel pertama saat impor, dan masih mengacaukan karakter khusus.
sumber
Jawaban:
Mengutip insinyur dukungan Microsoft ,
Pembaruan, 2017 : Ini berlaku untuk semua versi Microsoft Excel untuk Mac sebelum Office 2016 . Versi yang lebih baru (dari Office 365) sekarang mendukung UTF-8.
Untuk menghasilkan konten UTF-8 yang dapat dibaca dengan baik oleh Excel di Windows dan OS X, Anda perlu melakukan dua hal:
Pastikan Anda mengonversi teks CSF UTF-8 Anda menjadi UTF-16LE
Pastikan Anda menambahkan tanda urutan byte UTF-16LE ke awal file
Masalah berikutnya yang hanya muncul dengan Excel pada OS X (tetapi bukan Windows) adalah ketika melihat file CSV dengan nilai yang dipisahkan koma, Excel akan membuat baris hanya dengan satu baris dan semua teks bersama dengan koma di baris pertama.
Cara untuk menghindari ini adalah dengan menggunakan tab sebagai nilai Anda yang terpisah.
Saya menggunakan fungsi ini dari komentar PHP (menggunakan tab "\ t" alih-alih koma) dan berfungsi dengan baik pada OS X dan Windows Excel.
Perhatikan bahwa untuk memperbaiki masalah dengan kolom kosong sebagai akhir baris, saya memang harus mengubah baris kode yang mengatakan:
untuk
Seperti beberapa komentar lain di halaman ini katakan, aplikasi spreadsheet lain seperti OpenOffice Calc, Angka Apple sendiri dan Google Doc's Spreadsheet tidak memiliki masalah dengan file UTF-8 dengan koma.
Lihat tabel di pertanyaan ini untuk mengetahui apa yang berfungsi dan tidak berfungsi untuk file Unicode CSV di Excel
Sebagai catatan, saya dapat menambahkan bahwa jika Anda menggunakan Komposer , Anda harus melihat menambahkan
League\Csv
ke kebutuhan Anda.League\Csv
memiliki API yang sangat bagus untuk membuat file CSV .Untuk menggunakan
League\Csv
metode membuat file CSV ini, lihat contoh inisumber
sep=;
atausep=,
ke file CSV memberi tahu Excel bagaimana CSV dipisahkan dan kolom akan dibuat dengan benar lagi."sep=,\n"
, kemudian pada baris lain menambahkan data. Semuanya baik-baik saja jika saya melakukan semuanya dalam satu baris ($csv = chr(255) . chr(254) /* BOM */ . "sep=,\n" . mb_convert_encoding($csv, 'UTF-16LE', 'UTF-8');
). Semuanya tampak hebat sekarang di Mac. Saya tidak punya Windows untuk diuji.Saya memiliki masalah yang sama (atau serupa).
Dalam kasus saya, jika saya menambahkan BOM ke output, itu berfungsi:
Saya percaya ini adalah peretasan yang sangat jelek, tetapi berhasil bagi saya, setidaknya untuk Excel 2007 Windows. Tidak yakin itu akan berfungsi pada Mac.
sumber
Inilah cara saya melakukannya (itu untuk meminta browser mengunduh file csv):
Satu-satunya hal itu memperbaiki masalah pengkodean UTF8 dalam pratinjau CSV ketika Anda menekan spasi di Mac .. tetapi tidak di Excel Mac 2008 ... tidak tahu mengapa
sumber
$outstream = fopen( "php://output", 'w' ); fputs( $outstream, "\xEF\xBB\xBF" ); foreach ( $export as $fields ) { fputcsv( $outstream, $fields ); } fclose( $outstream );
))
.Saya hanya berurusan dengan masalah yang sama, dan muncul dengan dua solusi.
Gunakan kelas PHPExcel seperti yang disarankan oleh bpeterson76 .
Berikut adalah metode PHP yang akan mengambil beberapa data TSV dan mengeluarkan file Excel ke browser, perhatikan bahwa ia menggunakan Excel5 Writer, yang berarti file tersebut harus kompatibel dengan versi Excel yang lebih lama, tetapi saya tidak lagi memiliki akses ke apa pun, jadi saya tidak bisa mengujinya.
Karena masalah efisiensi dengan PHPExcel, saya juga harus mencari cara untuk menghasilkan file CSV atau TSV yang kompatibel dengan UTF-8 & Excel.
Berikut adalah kode PHP yang saya gunakan, perhatikan bahwa saya menggunakan data tsv (tab sebagai pembatas bukan koma):
sumber
Saya mengalami masalah yang sama dan diselesaikan seperti di bawah ini:
sumber
Excel tidak mendukung UTF-8. Anda harus menyandikan teks UTF-8 ke dalam UCS-2LE.
sumber
Dalam kasus saya berikut ini berfungsi sangat baik untuk membuat file CSV dengan karakter UTF-8 ditampilkan dengan benar di Excel.
The
0xEF 0xBB 0xBF
sundulan BOM akan membiarkan Excel tahu pengkodean yang benar.sumber
fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF));
<- inilah yang aku butuhkan. Itu bekerja seperti pesona.Untuk menindaklanjuti ini:
Tampaknya masalahnya hanya dengan Excel di Mac. Bukan bagaimana saya menghasilkan file, karena bahkan menghasilkan CSV dari Excel adalah melanggarnya. Saya simpan sebagai CSV, dan impor kembali, dan semua karakter kacau.
Jadi ... sepertinya tidak ada jawaban yang benar untuk ini. Terima kasih atas semua sarannya.
Saya akan mengatakan bahwa dari semua yang saya baca, saran @Daniel Magliola tentang BOM mungkin akan menjadi jawaban terbaik untuk beberapa komputer lain. Tapi itu masih belum menyelesaikan masalah saya.
sumber
Ini berfungsi dengan baik di excel untuk Windows dan juga Mac OS.
Perbaiki masalah di excel yang tidak menampilkan karakter yang mengandung diakritik, huruf cyrillic, huruf yunani dan simbol mata uang.
sumber
File CSV harus termasuk Tanda Pemesanan Byte.
Atau seperti yang disarankan dan solusi hanya gema dengan badan HTTP
sumber
Menambahkan:
Atau:
Sebelum menulis konten apa pun ke file CSV.
Contoh:
sumber
Karena pengkodean UTF8 tidak berfungsi dengan baik dengan Excel. Anda dapat mengonversi data ke jenis penyandian lain menggunakan
iconv()
.misalnya
sumber
Mengonversi teks yang sudah dikodekan utf-8 dengan menggunakan
mb_convert_encoding
tidak diperlukan. Cukup tambahkan tiga karakter di depan konten asli:Bagi saya ini menyelesaikan masalah karakter khusus dalam file csv.
sumber
fputs
.Ketika saya menyelidiki dan menemukan bahwa UTF-8 tidak berfungsi dengan baik pada MAC dan Windows, jadi saya mencoba dengan Windows-1252, ia mendukung dengan baik pada keduanya tetapi Anda harus memilih jenis pengkodean di ubuntu. Ini kode saya
$valueToWrite = mb_convert_encoding($value, 'Windows-1252');
sumber
sumber
Bagaimana kalau hanya menghasilkan untuk Excel sendiri? Ini adalah kelas yang sangat baik yang memungkinkan Anda untuk menghasilkan file sisi server file XLS. Saya sering menggunakannya untuk klien yang tidak dapat "mencari tahu" csv dan sejauh ini tidak pernah memiliki keluhan. Ini juga memungkinkan beberapa pemformatan tambahan (bayangan, ketinggian baris, perhitungan, dll) yang tidak akan pernah dilakukan csv.
sumber
Anda dapat mengonversi CSV String Anda dengan iconv . sebagai contoh:
sumber
Anda harus menggunakan penyandian "Windows-1252".
Mungkin Anda harus mengonversi string Anda:
sumber
Anda dapat menambahkan 3 byte ke file sebelum mengekspor, itu berfungsi untuk saya. Sebelum melakukan sistem itu hanya berfungsi di Windows dan HP -UX tetapi gagal di Linux.
Memiliki UTF-8 BOM (3 byte, hex EF BB BF) di awal file. Kalau tidak, Excel akan menginterpretasikan data sesuai dengan pengkodean default lokal Anda (mis. Cp1252) alih-alih utf-8
Membuat file CSV untuk Excel, cara memiliki baris baru di dalam suatu nilai
sumber
Saya menggunakan Mac, dalam kasus saya, saya hanya harus menentukan pemisah dengan
"sep=;\n"
dan menyandikan file dalam UTF-16LE seperti ini:sumber
Bagi saya tidak ada solusi di atas yang berhasil. Di bawah ini adalah apa yang saya lakukan untuk menyelesaikan masalah: ubah nilainya menggunakan fungsi ini dalam kode PHP:
Nilai output ini benar dalam lembar excel.
sumber
Saya memiliki masalah yang sama ketika saya memiliki rutin Excel VBA yang mengimpor data. Karena CSV adalah format teks biasa, saya menangani ini dengan secara terprogram membuka data dalam editor file sederhana seperti wordpad, dan menyimpannya kembali sebagai teks unicode, atau menyalinnya ke clipboard dari sana dan menempelkannya ke Excel. Jika excel tidak secara otomatis mem-parsing CSV ke dalam sel, ini mudah diperbaiki menggunakan fitur "Teks ke Kolom" bawaan.
sumber
Apakah masalah masih terjadi ketika Anda menyimpannya sebagai file .txt dan membukanya dengan exca sebagai pembatas?
Masalahnya mungkin bukan encoding sama sekali, mungkin saja file tersebut bukan CSV yang sempurna menurut standar excel.
sumber
Posting ini cukup lama, tetapi setelah berjam-jam mencoba saya ingin berbagi solusi saya ... mungkin itu membantu seseorang yang berurusan dengan Excel dan Mac dan CSV dan tersandung oleh ancaman ini. Saya menghasilkan csv secara dinamis sebagai output dari Database dengan Pengguna Excel dalam pikiran. (UTF-8 dengan BOM)
Saya mencoba banyak ikon tetapi tidak bisa membuat umlaut Jerman berfungsi di Mac Excel 2004. Satu solusi: PHPExcel. Ini bagus tetapi untuk proyek saya agak terlalu banyak. Yang berhasil bagi saya adalah membuat file csv dan mengonversi file csv ini menjadi xls dengan PHPsnippet ini: csv2xls . xls hasil bekerja dengan excel umlaut Jerman (ä, ö, Ü, ...).
sumber
Saya baru saja mencoba tajuk ini dan mendapatkan Excel 2013 pada PC Windows 7 untuk mengimpor file CSV dengan karakter khusus dengan benar. Byte Order Mark (BOM) adalah kunci terakhir yang membuatnya berfungsi.
sumber
Jika tidak, Anda dapat:
sumber
Solusi MUDAH untuk Mac Excel 2008: Saya berkali-kali bergumul dengan masalah ini, tetapi inilah cara mudah saya: Buka file .csv di Textwrangler yang seharusnya membuka karakter UTF-8 Anda dengan benar. Sekarang di bilah status bawah, ubah format file dari "Unicode (UTF-8)" ke "Western (ISO Latin 1)" dan simpan file tersebut. Sekarang pergi ke Mac Excel 2008 Anda dan pilih File> Impor> Pilih csv> Temukan file Anda> di File asal pilih "Windows (ANSI)" dan voila karakter UTF-8 ditampilkan dengan benar. Setidaknya itu untukku ...
sumber
Saya menggunakan ini dan berfungsi
sumber
# Keluarkan UTF-8 CSV dalam PHP yang akan dibaca Excel dengan benar.
sumber
sumber