Kami memiliki aplikasi web yang mengekspor file CSV yang berisi karakter asing dengan UTF-8, tanpa BOM. Baik pengguna Windows dan Mac mendapatkan karakter sampah di Excel. Saya mencoba mengonversi ke UTF-8 dengan BOM; Excel / Win baik-baik saja dengan itu, Excel / Mac menunjukkan omong kosong. Saya menggunakan Excel 2003 / Win, Excel 2011 / Mac. Inilah semua pengkodean yang saya coba:
Encoding BOM Win Mac
-------- --- ---------------------------- ------------
utf-8 -- scrambled scrambled
utf-8 BOM WORKS scrambled
utf-16 -- file not recognized file not recognized
utf-16 BOM file not recognized Chinese gibberish
utf-16LE -- file not recognized file not recognized
utf-16LE BOM characters OK, same as Win
row data all in first field
Yang terbaik adalah UTF-16LE dengan BOM, tetapi CSV tidak dikenali seperti itu. Pemisah bidang adalah koma, tetapi titik koma tidak mengubah banyak hal.
Apakah ada pengkodean yang berfungsi di kedua dunia?
mb_convert_encoding($str, "UTF-16LE");
dalam kode ekspor saya dan memposting hasilnya di sini.Jawaban:
Pengkodean Excel
Saya menemukan
WINDOWS-1252
pengkodean menjadi yang paling tidak membuat frustrasi saat berhadapan dengan Excel. Karena pada dasarnya kumpulan karakter milik Microsoft sendiri, orang dapat berasumsi bahwa itu akan bekerja pada Mac dan versi Windows dari MS-Excel. Kedua versi tersebut setidaknya menyertakan pemilih "File origin" atau "File encoding" yang membaca data dengan benar.Tergantung pada sistem Anda dan alat yang Anda gunakan, pengkodean ini bisa juga diberi nama
CP1252
,ANSI
,Windows (ANSI)
,MS-ANSI
atau hanyaWindows
, antara variasi lainnya.Pengkodean ini adalah superset dari
ISO-8859-1
(aliasLATIN1
dan lainnya), jadi Anda dapat beralih keISO-8859-1
jika Anda tidak dapat menggunakanWINDOWS-1252
karena alasan tertentu. Perhatikan bahwaISO-8859-1
ada beberapa karakter yang hilang dariWINDOWS-1252
seperti yang ditunjukkan di sini:Perhatikan bahwa tanda euro tidak ada . Meja ini bisa didapatkan di Alan Wood .
Konversi
Konversi dilakukan secara berbeda di setiap alat dan bahasa. Namun, misalkan Anda memiliki file
query_result.csv
yang Anda tahuUTF-8
dikodekan. Ubah menjadiWINDOWS-1252
menggunakaniconv
:sumber
WINDOS-1252
, yang kemungkinan besar akan ditafsirkan dengan benar oleh Mac dan Windows Excel.Untuk UTF-16LE dengan BOM jika Anda menggunakan karakter tab sebagai pembatas, bukan koma, Excel akan mengenali bidang. Alasan berhasil adalah karena Excel akhirnya menggunakan parser Unicode * .txt-nya.
Peringatan : Jika file diedit di Excel dan disimpan, itu akan disimpan sebagai ASCII tab-delimited. Masalahnya sekarang adalah ketika Anda membuka kembali file, Excel menganggap itu CSV asli (dengan koma), melihat bahwa itu bukan Unicode, jadi parsing sebagai dipisahkan koma - dan karenanya akan membuat hash darinya!
Memperbarui : Peringatan di atas tampaknya tidak terjadi pada saya hari ini di Excel 2010 (Windows) setidaknya, meskipun tampaknya ada perbedaan dalam perilaku penyimpanan jika:
dibandingkan dengan:
sumber
sep=,
dan pengkodean UTF16LE berfungsi untuk saya dan tidak memerlukan karakter pemisah yang berbeda (tetap koma). Membuka file dengan mengklik dua kali memuat file dengan benar, dengan karakter khusus dan jeda baris di dalam sel utuh. Kelemahan:sep=,
header tidak dikenali oleh program apa pun kecuali Excel sejauh yang saya lihat. Tetapi OpenOffice / LibreOffice tidak memerlukan peretasan ini (jeda baris dalam konten sel berfungsi dengan baik, sedangkan memuat dari file teks / menggunakan teks ke dalam asisten kolom di Excel tidak menangani jeda baris di sel dengan benar).Intinya adalah: Tidak ada solusi. Excel 2011 / Mac tidak dapat menafsirkan dengan benar file CSV yang berisi umlaut dan tanda diakritik apa pun pengkodean atau lompatan lingkaran yang Anda lakukan. Saya akan senang mendengar seseorang mengatakan saya berbeda!
sumber
Anda hanya mencoba CSV yang dipisahkan koma dan titik koma. Jika Anda telah mencoba CSV yang dipisahkan tab (juga disebut TSV), Anda akan menemukan jawabannya:
UTF-16LE dengan BOM (tanda urutan byte), dipisahkan tab
Tapi : Dalam komentar Anda menyebutkan bahwa TSV bukanlah pilihan untuk Anda (saya belum dapat menemukan persyaratan ini dalam pertanyaan Anda). Kasihan. Ini sering kali berarti bahwa Anda mengizinkan pengeditan file TSV secara manual, yang mungkin bukan ide yang baik. Pemeriksaan visual file TSV tidak menjadi masalah. Selanjutnya editor dapat diatur untuk menampilkan karakter khusus untuk menandai tab.
Dan ya, saya mencobanya di Windows dan Mac.
sumber
Berikut adalah penentu untuk mengimpor CSV berenkode utf8 ke Excel 2011 untuk Mac: Microsoft mengatakan: "Excel untuk Mac saat ini tidak mendukung UTF-8." Excel untuk Mac 2011 dan UTF-8
Hore, hebat MS!
sumber
Solusi terbaik untuk membaca file CSV dengan UTF-8 di Mac adalah dengan mengonversinya menjadi format XLSX. Saya telah menemukan skrip yang dibuat oleh Konrad Foerstner, yang telah saya tingkatkan sedikit dengan menambahkan dukungan untuk karakter pembatas yang berbeda.
Unduh skrip dari Github https://github.com/brablc/clit/blob/master/csv2xlsx.py . Dalam rangka untuk menjalankannya Anda akan perlu menginstal python modul openpyxl untuk manipulasi file Excel:
sudo easy_install openpyxl
.sumber
Dalam kasus saya ini berhasil (Mac, Excel 2011, karakter Sirilik dan Latin dengan diakritik Ceko):
sumber
Tampaknya kasus saya bahwa Excel 2011 untuk Mac OS tidak menggunakan Encoding.GetEncoding ("10000") seperti yang saya pikirkan dan menghabiskan 2 hari dengan tapi iso yang sama seperti di Microsoft OS. Bukti terbaik untuk ini adalah dengan membuat file di Excel 2011 untuk MAC dengan karakter khusus, simpan sebagai CSV, lalu buka di editor teks MAC dan karakter diacak.
Bagi saya, pendekatan ini berhasil - artinya ekspor csv di Excel 2011 di MAC OS memiliki karakter europeean barat khusus di dalamnya:
sumber
UTF-8 tanpa BOM saat ini berfungsi untuk saya di Excel Mac 2011 14.3.2.
UTF-8 + BOM jenis pekerjaan, tetapi BOM dianggap omong kosong.
UTF-16 berfungsi jika Anda mengimpor file dan menyelesaikan wizard, tetapi tidak jika Anda hanya mengklik dua kali.
sumber
Yang berikut ini berfungsi untuk saya di Excel untuk Mac 2011 dan Windows Excel 2002:
Menggunakan iconv di Mac, konversikan file ke UTF-16 Little-Endian + beri nama * .txt (ekstensi .txt memaksa Excel untuk menjalankan Wisaya Impor Teks):
iconv -f UTF-8 -t UTF-16LE filename.csv >filename_UTF-16LE.csv.txt
Buka file di Excel dan di Wisaya Impor Teks pilih:
PS UTF-16LE yang dibuat oleh iconv memiliki BOM byte FF FE pada awalnya.
PPS File csv asli saya dibuat di komputer Windows 7, dalam format UTF-8 (dengan byte BOM EF BB BF pada awalnya) dan menggunakan jeda baris CRLF. Koma digunakan sebagai pembatas bidang dan tanda kutip tunggal sebagai pengualifikasi teks. Itu berisi huruf ASCII ditambah huruf latin yang berbeda dengan tilde, umlaut dll, ditambah beberapa cyrillic. Semua ditampilkan dengan benar di Excel untuk Win dan Mac.
Versi perangkat lunak PPPS Exact:
* Mac OS X 10.6.8
* Excel untuk Mac 2011 v.14.1.3
* Windows Server 2003 SP2
* Windows Excel 2002 v.10.2701.2625
sumber
Di Mac OS saya, Text Wrangler mengidentifikasi file CSV yang dibuat dengan Excel memiliki pengkodean "Barat".
Setelah beberapa googling, saya telah membuat skrip kecil ini (saya tidak yakin tentang ketersediaan Windows, mungkin dengan Cygwin ?):
$ cat /usr/local/bin/utf8.sh
sumber
Dalam kasus saya menambahkan Pembukaan ke file memecahkan masalah saya:
sumber
alih-alih csv, cobalah mengeluarkan html dengan ekstensi XLS dan jenis mime "application / excel". Saya tahu ini akan berfungsi di Windows, tetapi tidak dapat berbicara untuk MacOS
sumber
br
tag), Excel untuk Mac mengabaikan CSS (berfungsi dengan Windows)mso-data-placement:same-cell;
Ini berhasil untuk saya
Sekarang poin kuncinya, pilih MacIntosh sebagai File Origin (itu harus menjadi pilihan pertama).
Ini menggunakan Excel 2011 (versi 14.4.2)
* Ada sedikit dropdown di bagian bawah jendela
sumber
Selesaikan ini menggunakan java (UTF-16LE dengan BOM):
Perhatikan bahwa file CSV harus menggunakan
TAB
sebagai pemisah. Anda dapat membaca file CSV baik di windows dan MAC OS X.Lihat: Bagaimana cara saya menyandikan / mendekode array byte UTF-16LE dengan BOM?
sumber