I'm mengembangkan bagian dari sebuah aplikasi yang's jawab untuk mengekspor data ke file CSV. Aplikasi selalu menggunakan UTF-8 karena multibahasa alam di semua tingkatan. Tapi seperti membuka file CSV (misalnya yang mengandung diakritik, huruf cyrillic, yunani huruf) di Excel tidak mencapai hasil yang diharapkan menunjukkan sesuatu seperti Г"/Г¤, Г–/Г¶
. Dan saya don't tahu bagaimana untuk memaksa Excel memahami bahwa membuka file CSV dikodekan dalam UTF-8. Saya juga mencoba menentukan UTF-8 BOM EF BB BF
, tapi Excel mengabaikan itu.
Apakah ada solusi?
P. S. alat-alat Yang berpotensi berperilaku seperti Excel tidak?
UPDATE
Saya harus mengatakan bahwa saya've bingung masyarakat dengan rumusan pertanyaan. Ketika saya mengajukan pertanyaan ini, saya diminta untuk cara membuka UTF-8 file CSV di Excel tanpa masalah bagi pengguna, di sebuah lancar dan transparan. Namun, saya menggunakan salah rumusan meminta untuk melakukan itu automatically. Yang sangat membingungkan dan bentrokan dengan VBA macro automation. Ada dua jawaban untuk pertanyaan ini yang saya menghargai sebagian besar: pertama menjawab dengan Alex https://stackoverflow.com/a/6002338/166589, dan aku've diterima jawaban ini; dan yang kedua oleh Mark https://stackoverflow.com/a/6488070/166589 bahwa telah muncul beberapa saat kemudian. Dari kegunaan point of view, Excel tampaknya memiliki kekurangan user-friendly UTF-8 CSV dukungan, sehingga saya menganggap both jawaban yang benar, dan saya telah menerima Alex's jawaban pertama karena itu benar-benar menyatakan bahwa Excel adalah tidak mampu melakukan itu secara transparan. Itu adalah apa yang saya bingung dengan automatically di sini. Mark's jawaban mempromosikan cara yang lebih rumit untuk pengguna yang lebih maju untuk mencapai hasil yang diharapkan. Kedua jawaban yang bagus, tapi Alex's satu cocok saya tidak ditentukan dengan jelas, pertanyaan yang sedikit lebih baik.
UPDATE 2
Lima bulan kemudian setelah edit terakhir, saya've melihat bahwa Alex's jawaban yang telah menghilang untuk beberapa alasan. Saya benar-benar berharap itu bukan't masalah teknis dan saya berharap tidak ada lagi diskusi yang menjawab lebih besar sekarang. Jadi saya'm menerima Tanda's jawaban sebagai yang terbaik.
Alex adalah benar, tapi anda harus mengekspor ke csv, anda dapat memberikan pengguna nasihat ini saat membuka file csv:
Cara ini karakter khusus harus menunjukkan dengan benar.
UTF-8 Byte-order penanda akan petunjuk Excel 2007+ di fakta bahwa anda're menggunakan UTF-8. (Lihat ini JADI post).
Dalam kasus ada yang mengalami masalah yang sama aku, .NET's encoding UTF8 kelas tidak output byte-order penanda dalam GetBytes()
call. Anda perlu untuk menggunakan stream](https://stackoverflow.com/a/30839531/120955) (atau menggunakan solusi) untuk mendapatkan BOM untuk output.
Hal ini luar biasa bahwa ada begitu banyak jawaban tapi tidak ada jawaban pertanyaan:
"Ketika saya mengajukan pertanyaan ini, saya diminta untuk cara membuka UTF-8 file CSV di Excel tanpa masalah bagi pengguna,..."
Jawabannya ditandai sebagai jawaban yang diterima dengan 200+ up-suara ini tidak berguna bagi saya karena saya don't ingin memberikan saya pengguna manual cara mengkonfigurasi Excel. Terlepas dari itu: panduan ini akan berlaku untuk salah satu versi Excel tapi lain versi Excel memiliki menu yang berbeda dan konfigurasi dialog. Anda akan perlu secara manual untuk masing-masing versi Excel.
Jadi pertanyaan adalah bagaimana untuk membuat Excel tampilkan UTF8 data dengan sederhana klik dua kali?
Well, setidaknya di Excel 2007 ini tidak mungkin jika anda menggunakan file CSV karena UTF8 BOM diabaikan dan anda akan melihat hanya sampah. Ini sudah bagian dari pertanyaan Lyubomyr Shaydariv:
"saya juga mencoba menentukan UTF-8 BOM EF BB BF, tetapi Excel mengabaikan itu."
Aku membuat pengalaman yang sama: Menulis bahasa rusia atau bahasa yunani data ke UTF8 file CSV dengan BOM mengakibatkan sampah di Excel:
Isi UTF8 CSV file:
Colum1;Column2
Val1;Val2
Авиабилет;Tλληνικ
Hasil di Excel 2007:
Solusi untuk tidak menggunakan CSV sama sekali. Format ini dilaksanakan begitu bodoh oleh Microsoft bahwa hal itu tergantung pada pengaturan wilayah di control panel jika koma atau koma digunakan sebagai pemisah. Jadi file CSV yang sama dapat membuka dengan benar pada satu komputer tapi pada antera komputer tidak. "CSV" yang berarti "Koma Dipisahkan nilai-Nilai" tapi misalnya di jerman Windows secara default koma harus digunakan sebagai pemisah sementara koma tidak bekerja. (Di sini harus bernama SSV = Koma Separated Values) file CSV tidak dapat dipertukarkan antara versi bahasa yang berbeda dari Windows. Ini adalah tambahan masalah untuk UTF-8 masalah.
Excel ada sejak beberapa dekade. Ini adalah rasa malu bahwa Microsoft tidak mampu melaksanakan hal dasar sebagai CSV import di semua tahun-tahun ini.
Namun, jika anda menempatkan nilai yang sama ke dalam sebuah file HTML dan simpan file tersebut sebagai UTF8 file dengan BOM dengan ekstensi file XLS anda akan mendapatkan hasil yang benar.
Isi UTF8 XLS file:
<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>
Hasil di Excel 2007:
Anda bahkan dapat menggunakan warna-warna dalam HTML yang Excel akan menampilkan dengan benar.
<style>
.Head { background-color:gray; color:white; }
.Red { color:red; }
</style>
<table border=1>
<tr><td class=Head>Colum1</td><td class=Head>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td class=Red>Авиабилет</td><td class=Red>Tλληνικ</td></tr>
</table>
Hasil di Excel 2007:
Dalam hal ini hanya meja itu sendiri memiliki perbatasan hitam dan garis-garis. Jika anda ingin SEMUA sel-sel untuk menampilkan gridlines ini juga mungkin dalam HTML:
<html xmlns:x="urn:schemas-microsoft-com:office:excel">
<head>
<meta http-equiv="content-type" content="text/plain; charset=UTF-8"/>
<xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>MySuperSheet</x:Name>
<x:WorksheetOptions>
<x:DisplayGridlines/>
</x:WorksheetOptions>
</x:ExcelWorksheet>
</x:ExcelWorksheets>
</x:ExcelWorkbook>
</xml>
</head>
<body>
<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>
</body>
</html>
Kode ini bahkan memungkinkan untuk menentukan nama lembar kerja (di sini "MySuperSheet")
Hasil di Excel 2007:
Punya masalah yang sama dengan PHP-generated file CSV.
Excel diabaikan BOM ketika Pemisah didefinisikan melalui "sep=,\n"
pada awal konten (tapi tentu saja setelah BOM).
Jadi menambahkan sebuah BOM ("\xEF\xBB\xBF"
) pada awal konten dan pengaturan titik koma sebagai pemisah melalui fputcsv($fh, $data_array, ";");
melakukan trik.
Saya punya masalah yang sama di masa lalu (bagaimana untuk menghasilkan file Excel dapat dibaca, dan alat-alat lain yang juga dapat membaca). Saya menggunakan TSV daripada CSV, tetapi masalah yang sama dengan pengkodean datang.
Aku gagal menemukan cara untuk mendapatkan Excel untuk mengenali UTF-8 secara otomatis, dan saya tidak bersedia/mampu menimbulkan pada konsumen dari file yang rumit petunjuk bagaimana untuk membuka mereka. Jadi saya dikodekan mereka sebagai UTF-16le (dengan BOM) bukan UTF-8. Dua kali ukuran, tetapi Excel dapat mengenali pengkodean. Dan mereka kompres dengan baik, sehingga ukuran jarang (tapi sayangnya tidak pernah) hal.
Seperti yang saya diposting di http://thinkinginsoftware.blogspot.com/2017/12/correctly-generate-csv-that-excel-can.html:
Memberitahu pengembang perangkat lunak bertanggung jawab untuk menghasilkan CSV untuk memperbaikinya. Sebagai solusi cepat anda dapat menggunakan gsed untuk menyisipkan UTF-8 BOM di awal string:
gsed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' file.csv
Perintah ini sisipan UTF-4 BOM jika tidak hadir. Oleh karena itu adalah idempotent perintah. Sekarang anda harus dapat klik dua kali file tersebut dan membukanya di Excel.
Anda dapat mengkonversi .csv file UTF-8 dengan BOM melalui Notepad++:
Encoding
→Convert to UTF-8
.File
→Simpan
.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)".
Hanya untuk membantu pengguna yang tertarik pada membuka file Excel yang mencapai thread ini seperti saya.
Saya telah menggunakan wizard di bawah ini dan itu bekerja dengan baik bagi saya, mengimpor UTF-8 file. Tidak transparan, tapi berguna jika anda sudah memiliki file.
Sumber: https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0
Sederhana vba macro untuk membuka utf-8 teks dan file csv
Sub OpenTextFile()
filetoopen = Application.GetOpenFilename("Text Files (*.txt;*.csv), *.txt;*.csv")
If filetoopen = Null Or filetoopen = Empty Then Exit Sub
Workbooks.OpenText Filename:=filetoopen, _
Origin:=65001, DataType:=xlDelimited, Comma:=True
End Sub
Asal:=65001 adalah UTF-8. Koma:Berlaku untuk .file csv didistribusikan di colums
Simpan dalam Pribadi.xlsb untuk memilikinya selalu tersedia. Personalisasi excel toolbar menambahkan makro tombol panggilan dan membuka file dari sana. Anda dapat menambahkan lebih banyak formating untuk makro, seperti kolom autofit , alignment,dll.
Ya, hal ini mungkin. Sebagaimana dicatat sebelumnya oleh beberapa pengguna, tampaknya ada masalah dengan excel membaca yang benar Byte Order Mark ketika file tersebut dikodekan dalam UTF-8. Dengan UTF-16 tampaknya tidak punya masalah, jadi itu adalah endemik ke UTF-8. Solusi yang saya gunakan untuk ini adalah menambahkan BOM, dua KALI. Selama ini saya jalankan berikut sed perintah dua kali:
sed -I '1s/^/\xef\xbb\xbf/' *.csv
, di mana wildcard dapat diganti dengan nama file. Namun, hal ini menyebabkan mutasi sep= di awal .file csv. Yang .file csv kemudian akan terbuka biasanya di excel, tapi dengan tambahan baris dengan "sep=" dalam sel pertama. "sep=" juga dapat dihapus di sumber .csv itu sendiri, tapi saat membuka file dengan VBA pembatas yang harus ditentukan:
Workbooks.Open(name, Format:=6, Delimiter:=";", Local:=True)
Format 6 adalah .format csv. Set Lokal untuk benar, dalam kasus ada tanggal di file. Jika Daerah tidak diatur ke true tanggal akan Amerikanisasi, yang dalam beberapa kasus akan merusak .format csv.
Benar-benar menakjubkan daftar jawaban, tapi karena satu bagus satu masih hilang, aku'll menyebutkan hal berikut: buka file csv dengan google sheets dan simpan kembali ke komputer lokal anda sebagai file excel.
Berbeda dengan Microsoft, Google telah berhasil untuk mendukung UTF-8 file csv sehingga hanya bekerja untuk membuka file yang ada. Dan ekspor ke format excel juga hanya bekerja. Jadi meskipun ini mungkin tidak menjadi pilihan solusi untuk semua, itu cukup aman gagal dan jumlah klik tidak setinggi itu mungkin terdengar, terutama bila anda're sudah login ke google pula.
hi i'm menggunakan ruby on rails untuk csv generasi. Dalam aplikasi kami, kami berencana untuk pergi untuk multi bahasa(I18n) dan kami menghadapi masalah saat melihat I18n konten dalam file CSV dari jendela excel.
Baik-baik saja dengan Linux (Ubuntu), dan mac.
Kami mengidentifikasi bahwa windows excel harus impor data lagi untuk melihat data yang sebenarnya. Sementara impor kita akan mendapatkan lebih banyak pilihan untuk memilih set karakter.
Tapi ini tidak dapat dididik untuk setiap pengguna, sehingga solusi yang kita cari adalah untuk membuka hanya dengan double klik.
Kemudian kami mengidentifikasi cara menampilkan data dengan modus terbuka dan bom di windows excel dengan bantuan aghuddleston inti. Ditambahkan pada referensi.
Contoh I18n konten
Di Mac dan Linux
Swedia : Förnamn Bahasa inggris : First name
Di Windows
Swedia : Förnamn Bahasa inggris : First name
def user_information_report(report_file_path, user_id)
user = User.find(user_id)
I18n.locale = user.current_lang
open_mode = "w+:UTF-16LE:UTF-8"
bom = "\xEF\xBB\xBF"
body user, open_mode, bom
end
def headers
headers = [
"ID", "SDN ID",
I18n.t('sys_first_name'), I18n.t('sys_last_name'), I18n.t('sys_dob'),
I18n.t('sys_gender'), I18n.t('sys_email'), I18n.t('sys_address'),
I18n.t('sys_city'), I18n.t('sys_state'), I18n.t('sys_zip'),
I18n.t('sys_phone_number')
]
end
def body tenant, open_mode, bom
File.open(report_file_path, open_mode) do |f|
csv_file = CSV.generate(col_sep: "\t") do |csv|
csv << headers
tenant.patients.find_each(batch_size: 10) do |patient|
csv << [
patient.id, patient.patientid,
patient.first_name, patient.last_name, "#{patient.dob}",
"#{translate_gender(patient.gender)}", patient.email, "#{patient.address_1.to_s} #{patient.address_2.to_s}",
"#{patient.city}", "#{patient.state}", "#{patient.zip}",
"#{patient.phone_number}"
]
end
end
f.write bom
f.write(csv_file)
end
end
Hal-hal penting untuk dicatat di sini adalah membuka mode dan bom
open_mode = "w+:UTF-16LE:UTF-8"
bom = "\xEF\xBB\xBF"
Sebelum menulis CSV menyisipkan BOM
f.menulis bom
f.menulis(csv_file)
Windows dan Mac
File dapat dibuka langsung dengan mengklik ganda.
Linux (ubuntu)
Ini tidak akurat menangani pertanyaan tapi karena saya sengaja menemukan ini dan solusi di atas tidak't bekerja untuk saya atau memiliki persyaratan saya tidak't bertemu, di sini adalah cara lain untuk menambahkan BOM ketika anda memiliki akses ke vim:
vim -e -s +"set bomb|set encoding=utf-8|wq" filename.csv
Saya menghadapi masalah yang sama beberapa hari yang lalu, dan tidak bisa menemukan solusi karena saya tidak bisa menggunakan impor dari csv fitur
karena itu membuat segala sesuatu untuk ditata sebagai string.
Solusi saya adalah untuk pertama kali membuka file dengan notpad++ dan mengubah encode ke ASCII
.
Kemudian hanya membuka file di excel dan bekerja seperti yang diharapkan.
Jika anda ingin membuatnya sepenuhnya otomatis, satu klik, atau untuk memuat secara otomatis ke Excel dari mengatakan sebuah halaman web, tetapi dapat't tepat menghasilkan file Excel, maka saya akan sarankan melihat format SYLK sebagai alternatif. OK itu tidak sesederhana CSV tapi itu adalah berbasis teks dan sangat mudah untuk menerapkan dan mendukung UTF-8 dengan tidak ada masalah.
Saya menulis sebuah kelas PHP yang menerima data dan output SYLK file yang akan dibuka langsung di Excel dengan hanya mengklik file (atau akan auto-peluncuran Excel jika anda menulis file untuk halaman web dengan tipe mime yang benar. Anda bahkan dapat menambahkan format (seperti bold, format angka dalam cara-cara tertentu dll) dan mengubah ukuran kolom, atau auto ukuran kolom untuk teks dalam kolom dan semua dalam semua kode ini mungkin tidak lebih dari sekitar 100 baris.
Hal ini sangat mudah untuk merekayasa SYLK dengan membuat spreadsheet sederhana dan hemat sebagai SYLK dan kemudian membacanya dengan editor teks. Blok pertama adalah header dan standar format nomor yang anda akan mengenali (yang anda hanya memuntahkan di setiap file yang anda buat), kemudian data tersebut hanya X/Y koordinat dan nilai.