Excel'in UTF-8 CSV dosyalarını otomatik olarak tanımasını sağlamak mümkün müdür?


455

CSV dosyalarına bazı verileri aktarmaktan sorumlu bir uygulamanın bir bölümünü geliştiriyorum. Uygulama her düzeyde çok dilli yapısı nedeniyle her zaman UTF-8 kullanır. Ancak bu tür CSV dosyalarını (örneğin aksan harfleri, kiril harfleri, Yunan harfleri içeren) Excel'de açmak, benzer bir şey gösteren beklenen sonuçları elde etmez Г„/Г¤, Г–/Г¶. Ve Excel'i açık CSV dosyasının UTF-8'de kodlandığını anlamaya nasıl zorlayacağımı bilmiyorum. Ayrıca UTF-8 BOM belirtmeyi denedim EF BB BF, ancak Excel bunu görmezden geliyor.

Herhangi bir çözüm var mı?

PS Hangi araçlar Excel gibi davranabilir?


GÜNCELLEME

Toplumu sorunun formülasyonuyla karıştırdığımı söylemeliyim. Bu soruyu sorduğumda, bir kullanıcı için sorunsuz ve akıcı ve şeffaf bir şekilde, UTF-8 CSV dosyasını Excel'de açmanın bir yolunu istedim. Ancak, otomatik olarak yapılmasını isteyen yanlış bir formülasyon kullandım . Bu çok kafa karıştırıcı ve VBA makro otomasyonu ile çatışıyor. Bu soruların en çok takdir ettiğim iki yanıtı var: Alex'in ilk cevabı https://stackoverflow.com/a/6002338/166589 ve bu cevabı kabul ediyorum; ve ikincisi Mark https://stackoverflow.com/a/6488070/166589biraz sonra ortaya çıktı. Kullanılabilirlik açısından, Excel'in iyi bir kullanıcı dostu UTF-8 CSV desteğinden yoksun olduğu görülüyordu, bu yüzden her iki cevabın da doğru olduğunu düşünüyorum ve ilk önce Alex'in cevabını kabul ettim çünkü gerçekten Excel'in yapamadığını belirtti şeffaf bir şekilde. Burada otomatik olarak kafam karıştı . Mark'ın cevabı, daha ileri düzey kullanıcılar için beklenen sonuca ulaşmak için daha karmaşık bir yol sağlar. Her iki cevap da harika, ama Alex'in cevabı açıkça belirtilmeyen sorumu biraz daha iyi uyuyor.


GÜNCELLEME 2

Son düzenlemeden beş ay sonra Alex'in cevabının bir nedenle kaybolduğunu fark ettim. Umarım bu teknik bir sorun değildir ve umarım hangi cevabın daha büyük olduğu hakkında daha fazla tartışma yoktur. Bu yüzden Mark'ın cevabını en iyisi olarak kabul ediyorum.


1
Sekmeyle ayrılmış dosyaları kullanabilir misiniz? Eğer öyleyse, daha fazla şansınız olabilir.
Tim Perry

8
Office 2010+: en iyi işler: BOM ve \tsınırlayıcı olarak UTF-16LE . İngilizce ve İngilizce olmayan Excel ayarlarında çalışacaktır. Ctrl-SDosya formatını seçmeden basabilir vb. Unicode karakterleri korur.
Sebastian

@Duncan açıkçası, kafam karıştı ve "yargılamak" zor. Alex'in cevabını 2 yıldan fazla bir süre önce kabul ettim (Q ve A her ikisi de 14 Mayıs'ta) ve sonra Mark, şaşırtıcı bir şekilde, soruma şaşırtıcı bir şekilde daha fazla puan kazandıran zor bir geçici çözüm (aslında kontrol etmedim) önerdi. popüler. Aslında uzun zaman önce projemde Excel desteğini reddettik ve alex'in itibar puanını almak istemiyorum, çünkü Excel görünüyordu ve muhtemelen hala görünüyor (yanlışsa beni düzeltin), CSV'yi ele almak için. Söylemesi zor, üzgünüm.
Lyubomyr Shaydariv

2
Alex'in yanıtı bir moderatör tarafından silindi. Hiçbir açıklama yapılmadı, ancak yeterli itibara sahipseniz hala görebilirsiniz.
Mark Ransom

1
Zaman makineleri henüz mevcut olmadığından, aynı fikirde olmak zorunda değilsiniz.
osexpert

Yanıtlar:


398

Alex doğrudur, ancak csv'ye dışa aktarmanız gerektiğinden, csv dosyalarını açarken kullanıcılara bu tavsiyeyi verebilirsiniz:

  1. Dışa aktarılan dosyayı csv olarak kaydedin
  2. Excel'i aç
  3. Verileri kullanarak verileri içe aktarın -> Harici Verileri İçe Aktar -> Verileri İçe Aktar
  4. "Csv" dosya türünü seçin ve dosyanıza göz atın
  5. Alma sihirbazında File_Origin'i "65001 UTF" olarak değiştirin (veya doğru dil karakter tanımlayıcısını seçin)
  6. Sınırlayıcıyı virgül olarak değiştirin
  7. Nereye aktarılacağını seçin ve Bitir

Bu şekilde özel karakterler doğru şekilde gösterilmelidir.


163

UTF-8 Bayt sırası işaretleyicisi, Excel 2007 + 'yı UTF-8 kullandığınız konusunda ipucu verecektir. ( Bu SO yazısına bakın ).

Herkes benimle aynı sorunları yaşıyorsa, .NET'in UTF8 kodlama sınıfı bir GetBytes()çağrıda bir bayt sırası işaretleyici çıktı vermez . Buna gerek akışları kullanmak (veya kullanmak bir çözüm ) çıkışına BOM alır.


18
UTF-8 ürün ağacını yerleştirmenin yolu bu gibi görünüyor. Bundan sonra şeffaf.
vy32

12
Kolayca gelen .csv dönüştürmek için Notepad ++ kullanmak UTF-8içinUTF-8 with BOM
Sébastien

3
Evet - en iyi çözüm. Http yanıtlarında başlıkların ayarlanmasıyla ilgili çok sayıda kafa karıştırıcı yayın. Bu sorunu çözer. Aynı dosyayı not defterinde açarken ve UTF-8 seçeneğini kullanarak hemen aşağı kaydederken de görülebilir. Ayrıca bayt sırası işaretleyicisini ekler.
user369142

1
@Elmue: Belki de (benim gibi) bir bayt sırası işaretleyicisiyle kurtardığını düşündüğünü düşündüm , ancak bazı kütüphaneler nasıl düşündüğünü çalışmadığı için değildi. Bu yanıtı eklemeye değer buldum ve açıkçası bazı insanlar da faydalı buldular. Her halükarda, CSV'yi kullanmamanızı söylemekten veya kullanıcılara dosyayı tuhaf bir şekilde nasıl açacaklarını öğretmekten daha iyi bir yanıt gibi görünüyor.
StriplingWarrior

1
Excel'in Mac sürümü hala ürün ağacını görmezden geliyor. (Mac için Excel 2011.)
Thomas Andrews

74

Yoksayılan BOM ile ilgili hata Excel 2013 için düzeltilmiş gibi görünüyor. Kiril harfleriyle aynı problemim vardı, ancak BOM karakteri eklemek \uFEFFyardımcı oldu.


8
CSV dosyamın başına (Java'da oluşturulmuş) \ uFEFF eklediğim için Excel bunları doğru bir şekilde açabilir! Thx
Galdo

16
Bu da benim sorunum çözüldü, php şöyle görünüyor $utf8_with_bom = chr(239) . chr(187) . chr(191) . $csvText:;
Abdullah

@updola bu yorum için çok teşekkürler, bana saat kurtardı
nathan hayfield

UTF-8, tanım gereği BOM karakterlerini kullanmaz veya kullanmamalıdır. Excel'in BOM'u okuma şekli, ASCII ile geriye dönük uyumluluk sağlayan Unicode'a göre UTF-8'in avantajını ortadan kaldırır. Malzeme Listesini eklemek Excel'in çalışmasını sağlar, ancak diğer uygun UTF-8 / ASCII dosya okumalarını bozar.
Nelson

1
\ FE \ FF, Mac OS Excel 2016'yı Japon hiyeroglifleri olarak bütün dosya yapar.
Nakilon

56

Çok fazla cevap olması inanılmaz ama hiçbiri soruyu cevaplamıyor:

"Bu soruyu sorduğumda, Excel'de bir kullanıcı için sorunsuz bir UTF-8 CSV dosyası açmanın bir yolunu istedim, ..."

200'den fazla oyla kabul edilen cevap olarak işaretlenen cevap benim için işe yaramaz çünkü kullanıcılarıma Excel'i nasıl yapılandıracağına dair bir kılavuz vermek istemiyorum. Bunun dışında: bu kılavuz bir Excel sürümüne uygulanacaktır, ancak diğer Excel sürümlerinin farklı menüleri ve yapılandırma iletişim kutuları vardır. Her Excel sürümü için bir kılavuza ihtiyacınız olacaktır.

Öyleyse soru, Excel'in basit bir çift tıklamayla UTF8 verilerini göstermesini sağlamak mı?

En azından Excel 2007'de, UTF8 BOM göz ardı edildiğinden ve yalnızca çöp göreceğinden CSV dosyaları kullanıyorsanız bu mümkün değildir. Bu zaten Lyubomyr Shaydariv sorununun bir parçası:

"Ayrıca UTF-8 BOM EF BB BF belirtmeyi denedim, ancak Excel bunu görmezden geliyor."

Ben aynı deneyimi yapmak: BOM ile bir UTF8 CSV dosyasına Rus veya Yunan veri yazmak Excel'de çöp ile sonuçlanır:

UTF8 CSV dosyasının içeriği:

Colum1;Column2
Val1;Val2
Авиабилет;Tλληνικ

Excel 2007'de sonuç:

CSV UTF8 Excel

Çözüm CSV'yi hiç kullanmamaktır. Bu biçim o bölge ayarlarına bağlıdır Microsoft tarafından öylesine aptalca uygulanan kontrol paneli ise virgül veya noktalı virgül ayırıcı olarak kullanılır. Böylece aynı CSV dosyası bir bilgisayarda doğru bir şekilde açılabilir, ancak başka bir bilgisayarda açılmayabilir. "CSV", " Virgülle Ayrılmış Değerler " anlamına gelir, ancak virgül çalışmazken, örneğin bir Alman Windows'ta varsayılan olarak noktalı virgül ayırıcı olarak kullanılmalıdır. (Burada SSV = Noktalı virgülle Ayrılmış Değerler olarak adlandırılmalıdır) CSV dosyaları Windows'un farklı dil sürümleri arasında değiştirilemez. Bu UTF-8 problemine ek bir problemdir.

Excel onlarca yıldan beri var. Microsoft'un bu yıllarda CSV ithalatı gibi temel bir şeyi uygulayamaması utanç vericidir.


Ancak, aynı değerleri bir HTML dosyasına koyarsanız ve XLS dosya uzantısına sahip BOM ile UTF8 dosyası olarak kaydederseniz , doğru sonucu alırsınız.

UTF8 XLS dosyasının içeriği:

<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>

Excel 2007'de sonuç:

UTF8 HTML Excel

HTML'de Excel'in doğru göstereceği renkleri bile kullanabilirsiniz.

<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>

Excel 2007'de sonuç:

UTF8 HTML Excel

Bu durumda sadece tablonun kendisi siyah bir kenarlığa ve çizgilere sahiptir. TÜM hücrelerin kılavuz çizgileri görüntülemesini istiyorsanız, bu HTML'de de mümkündür:

<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>

Bu kod bile çalışma sayfasının adını belirtmenize izin verir (burada "MySuperSheet")

Excel 2007'de sonuç:

resim açıklamasını buraya girin


1
İnsanların hala cevaplaması da inanılmaz. :) Bununla birlikte, CSV'nin öldüğünü iddia ediyorum: CSV ölümcül basit bir düz akış formatı ve bu projedeyken bileşen etkileşimi için de çok yoğun kullandık. Çok temsil edici yapısı nedeniyle asla HTML formatını kullanmam ve bu projenin kullanıcılarını sadece Excel dostu hale getirmek için HTML'ye veri aktarımı yapamadım. Excel UTF-8 CSV'yi emdi ve o zamandan bu yana 5 yıl içinde ne değiştiğine dair hiçbir fikrim yok. Ama virgül, noktalı virgül ve sekmeyle ayrılmış dosyalar gerçek delilik, sanırım.
Lyubomyr Shaydariv

5
İnsanların sorunuzu hala cevaplamaları inanılmaz değil çünkü Google onları buraya getiriyor: Hepsi aynı soru ile: İstediğimi yapmak için Excel'i nasıl aptallaştırabilirim? Google'a 3 kelime girin: "excel csv utf8" ve sorunuz dünya çapında İLK sonuçtur. En çok satanlar yazdınız!
Elmue

8
Buradaki diğer yanıtların hiçbirinin Excel'in bir CSV dosyasını doğru bir şekilde açmasına neden olmadığını belirtmek için zaman ayırdığınızdan, bu cevabın da bunu yapmadığını belirtmek gerekir. Başlangıçta kabul edilen cevap (bir moderatör tarafından silinmiştir), verileri doğrudan bir Excel dosyasına aktarmayı veya bir HTML dosyasını dışa aktarmayı ve kullanıcıların dosyayı Excel'de açmasına izin vermeyi önerdi. Bu çözümlerden her ikisi de bir HTML dosyasını bir XLS dosya uzantısıyla kaydetmekten daha az keskindir, ancak soruyu gerçekten cevaplayan bir yanıt önerilmemiştir.
StriplingWarrior

3
@ Savaşçı: ".. ama aslında soruyu cevaplayan hiçbir cevap önerilmedi." Bu doğru değil. Bu soruyu yanıtladım: En azından Excel 2007 ile Mümkün değil. Kesin cevap bu. Excel UTF8 Malzeme Listesini yoksayar ve verileri ANSI olarak yorumlarsa, örneğin dosyayı basitçe çift tıklatarak CSV yoluyla Excel'e Yunanca veya Rusça metin aktarmanın bir yolu yoktur (bu, "kullanıcı için herhangi bir sorun olmadan" sorusuydu "). ). Ne teklif TÜM Excel sürümleri ile çift tıklama ile çalışan ve Excel menülerinde ek adımlar gerektirmeyen çalışan bir çözümdür.
Elmue

2
Bu sadece soruyu cevaplamakla kalmaz, aynı zamanda CSV'nin "eski" ve "ölü" olduğunu söylemek tamamen yanlıştır. Bunun kullanımını görmemeniz, öldüğü anlamına gelmez. Ayrıca, tarihini veya bugün ne kadar yaygın olarak kullanıldığını açıkça anlamıyorsunuz. Bu XML'den (daha küçük paket boyutları nedeniyle) daha iyidir ve burada sorun Microsoft'un UTF8 biçimi için bir standardı nasıl takip etmediğidir. Doğru yanıt, Microsoft'un ilk etapta kodlamada hiç iyi olmadığı için Microsoft'u değil açık ofis kullanmak olacaktır.
Jeremy

49

Bu geçici çözümü kullandık:

  1. CSV birimini UTF-16 LE birimine dönüştür
  2. Dosyanın başına ürün ağacı ekle
  3. Alan ayırıcı olarak sekmeyi kullan

1
Teşekkürler! Bu konudaki diğer tüm cevapları denedim, ancak UTF-8'e dönüştürmek işe yaramadı. BOM ile UTF-16 denediğimde anında çalıştı.
Husky

Mac için Excel 2011 için UTF-16 küçük endian csv dosyaları ile başarılı oldum
multidynamic

Teşekkürler, bu çözüm kullanıcılarıma Excel'de açabilecekleri bir unicode csv vermek için mükemmeldir.
user1073075

21

PHP tarafından oluşturulan CSV dosyalarında da aynı sorunlar vardı. Ayırıcı üzerinden tanımlandığında Excel Malzeme Listesini yok saydı"sep=,\n" içeriğin başında (ancak tabii ki Malzeme Listesi'nden sonra) Listesini yoksaymıştır.

Böylece "\xEF\xBB\xBF", içeriğin başına bir Malzeme Listesi ( ) eklemek ve noktalı virgül ile ayırıcı olarak ayarlamak fputcsv($fh, $data_array, ";");hile yapar.


13

Geçmişte aynı sorunu yaşadım (Excel'in okuyabileceği ve diğer araçların da okuyabileceği dosyalar nasıl üretilir). CSV yerine TSV kullanıyordum, ancak aynı kodlama problemi ortaya çıktı.

Excel'in UTF-8'i otomatik olarak tanımasını sağlamak için herhangi bir yol bulamadım ve dosyaları nasıl açacağımı karmaşık talimatların tüketicilerine vermeyi istemedim / başaramadım. Bu yüzden onları UTF-8 yerine UTF-16le (BOM ile) olarak kodladım. Boyutun iki katı, ancak Excel kodlamayı tanıyabilir. Ve iyi sıkıştırırlar, bu nedenle boyut nadiren (ama ne yazık ki asla değil) önemlidir.


Bu eski bir soru, ama insanların hala cevapladığı için mutluyum. Teşekkür ederim. :)
Lyubomyr Shaydariv

1
@LububyrShaydariv: Bu soruyu cevapladığımdan beri, bir meslektaşım bana en son Excel'in ilk ürün ağacına sahip olmaları koşuluyla UTF-8 CSV dosyalarını tanımladığını söyledi. Birkaç yıl içinde, dünyadaki herkes (ya da her neyse, dosyaları teslim ettiğimiz herkes) Excel'in bu sürümünde veya daha iyisi olduğunda,
kodumu

Garip, benim için çalışmıyor. Karakterleri çince sembollere dönüştürür ... (İbranice olması gerekir)
Veverke

"UTF-16 BE BOM" ile kaydettiğimde Excel'de çince karakterler vardı. "BOM ile UTF-16 LE" denediğimde işe yaradı! Test için Sublime Text kullandım.
Henno

12

Eski soru ama heck, en basit çözüm:

  1. CSV'yi Not Defteri'nde açma
  2. Farklı Kaydet -> doğru kodlamayı seçin
  3. Yeni dosyayı aç

1
Hangi Excel sürümünü kullanıyorsunuz?
Lyubomyr Shaydariv

1
Parlak, sadece çalışıyor ve sorunu çözüyor (en azından benim için)
Auberon Vacher

1
Hayır, çünkü Excel'in .csv dosyasını bir csv dosyası olarak açmasıdır. Yani, csv dosyaları oluşturduğum bir süreç var. Kullanıcının yalnızca dosyaları açması gerekir. Burada bundan daha fazlasını yapması gerekiyor.
Veverke

2
@Veverke düzenli olarak dosya oluşturursanız bu en iyi çözüm değildir. Ama eğer bir kerelik, bu cevap mükemmel. Not Defteri, Malzeme Listesini UTF-8 veya UTF-16 dosyasının başına koyacağı için çalışır.
Mark Ransom

Tıkır tıkır çalışıyor. ((:
user2925795

10

Http://thinkinginsoftware.blogspot.com/2017/12/correctly-generate-csv-that-excel-can.html adresinde yayınladığım gibi :

Düzeltmek için CSV'yi oluşturmaktan sorumlu yazılım geliştiricisine söyleyin. Hızlı bir çözüm olarak UTF-8 BOM'unu dizenin başına eklemek için gsed komutunu kullanabilirsiniz:

gsed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' file.csv

Bu komut yoksa UTF-4 BOM'u ekler. Bu nedenle idempotent bir komuttur. Şimdi dosyayı çift tıklayıp Excel'de açabilmeniz gerekir.


Teşekkürler bu düzeltildi. Az önce csv'yi dönüştürdüm ';' Notepad ++ ile UTF-BOM'a ayrılmış ve know excels doğru şekilde açar.
RandomGuy

Tam olarak ne gerekiyordu! İşte PHP'de bunu nasıl uygulayacağınıza dair bir işaretçi stackoverflow.com/questions/25686191/…
EFC

Bu excel için csv dosyalarındaki utf karakterlerini tanıyamayan geçici çözümdür. Yani bu düzeltme excel sorunu gidermek için.
cobp

Bu, Excel 2007 Yunanca Sürüm için virgül ayırıcılar ile çalıştı. Teşekkür ederim.
NameOfTheRose

Kodlama, fs.createWriteStream'de (dosyaAdı, {kodlama: 'UTF-16le'}) 'UTF-16le' olarak değiştirildi ve CSV dosyasını doğru bir şekilde açtı
rahul shukla

9

Not Defteri ++ ile .csv dosyasını BOM ile UTF-8'e dönüştürebilirsiniz:

  1. Dosyayı Notepad ++ ile açın .
  2. Menü Encoding→ seçeneğine gidin Convert to UTF-8.
  3. Menü File→ seçeneğine gidin Save.
  4. Notepad ++ uygulamasını kapatın.
  5. Dosyayı Excel'de açın.

Microsoft Excel 2013 (15.0.5093.1000) MSO (15.0.5101.1000) Windows 8.1'de Microsoft Office Professional Plus 2013'ten "bit (") "olarak ayarlanmış Unicode olmayan programların yerel ayarıyla 64 bit olarak çalışmıştır.


1
Söylediklerini yaptım, hiç çalışmadı. Dönüştürme / kodlama, karakter setlerini ayarlama, benim durumumda hiçbir şey işe yaramadı. Dosyayı google sayfalarına aktarın, csv olarak indirin, kusursuz çalıştı.
2045'ten

1
Kodlama ile dönüştürmek zorunda kaldım -> Cinvert ti UTF-8-BOM Excel sürüm 2016
Igor Vuković

4

Utf-8 metin ve csv dosyalarını açmak için basit vba makrosu

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

Kaynağı: = 65001 UTF-8'dir. Virgül: Sütunlara dağıtılmış .csv dosyaları için doğru

Her zaman kullanılabilir olmasını sağlamak için Personal.xlsb dosyasına kaydedin. Bir makro çağrı düğmesi ekleyerek excel araç çubuğunu kişiselleştirin ve oradan dosyaları açın. Makroya sütun otomatik sığdırma, hizalama vb. Gibi daha fazla biçimlendirme ekleyebilirsiniz.


2
Teşekkürler. Ne yazık ki, bu gerçekten gelişmiş Excel kullanıcıları için öneri ve bu soruyu sormak istediğim şey, Excel'in bunu otomatik olarak yapmasını sağlamak.
Lyubomyr Shaydariv

Bu kod snippet'ini kullanmaya çalıştım ama benim için çalışmıyor. Excel 2013 kullanıyorum.
Sharunas Bielskis

3

Sadece benim gibi bu iş parçacığını elde Excel'de dosyayı açmak isteyen kullanıcıların yardım için.

Aşağıdaki sihirbazı kullandım ve UTF-8 dosyasını alarak benim için iyi çalıştı. Saydam değil, ancak dosya zaten varsa yararlıdır.

  1. Microsoft Excel 2007'yi açın.
  2. Veri menü çubuğu seçeneğini tıklayın.
  3. Metinden Gönder simgesini tıklayın.
  4. İçeri aktarmak istediğiniz dosyanın konumuna gidin. Dosya adına tıklayın ve ardından İçe Aktar düğmesine tıklayın. Metin Alma Sihirbazı - Adım 1 veya 3 penceresi artık ekranda görünecektir.
  5. Verilerinizi en iyi tanımlayan dosya türünü seçin - Sınırlı veya Sabit Genişlik.
  6. Dosya kaynağı'nın yanında görünen açılır listeden 65001: Unicode (UTF-8) öğesini seçin.
  7. Metin Alma Sihirbazı - Adım 2 veya 3 penceresini görüntülemek için İleri düğmesine tıklayın.
  8. Microsoft Excel 2007'ye almak istediğiniz dosyada kullanılan sınırlayıcının yanına bir onay işareti koyun. Veri önizleme penceresi, verilerinizi seçtiğiniz sınırlayıcıya göre nasıl görüneceğini gösterir.
  9. Metin Alma Sihirbazı'nı görüntülemek için Sonraki düğmesine tıklayın - Adım 3/3.
  10. Almak istediğiniz her veri sütunu için uygun veri biçimini seçin. İsterseniz bir veya daha fazla veri sütununu içe aktarmama seçeneğiniz de vardır.
  11. Verilerinizi Microsoft Excel 2007'ye aktarmayı tamamlamak için Son düğmesini tıklayın.

Kaynak: https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0


3

Evet, bu mümkün. Daha önce birden çok kullanıcı tarafından belirtildiği gibi, dosya UTF-8'de kodlandığında excel'in doğru Bayt Sırası İşaretini okumayla ilgili bir sorun var gibi görünüyor. UTF-16 ile bir problemi yok gibi görünüyor, bu yüzden UTF-8 için endemik. Bunun için kullandığım çözüm BOM, TWICE eklemektir. Bunun için aşağıdaki sed komutunu iki kez yürütüyorum:

sed -I '1s/^/\xef\xbb\xbf/' *.csv

, burada joker karakter herhangi bir dosya adıyla değiştirilebilir. Ancak, bu, .csv dosyasının başında sep = değerinde bir mutasyona neden olur. Daha sonra .csv dosyası excel'de normal olarak açılır, ancak ilk hücrede "sep =" ile fazladan bir satır bulunur. "Sep =" kaynak .csv dosyasının kendisinden de kaldırılabilir, ancak dosyayı VBA ile açarken sınırlayıcı belirtilmelidir:

Workbooks.Open(name, Format:=6, Delimiter:=";", Local:=True)

Biçim 6 .csv biçimidir. Dosyada tarih olması durumunda Yerel'i true olarak ayarlayın. Yerel doğru değerine ayarlanmazsa, tarihler Amerikanlaştırılır; bu, bazı durumlarda .csv biçimini bozar.


1
sed komutunu çalıştırırken şunu alıyorum: "sed: invalid option - 'I'", bence 'i' olmalı
BiAiB

2

Bu benim çalışma çözümüm:

vbFILEOPEN = "your_utf8_file.csv"
Workbooks.OpenText Filename:=vbFILEOPEN, DataType:=xlDelimited, Semicolon:=True, Local:=True, Origin:=65001

Anahtar Menşei: = 65001


2

Evet mümkün. Csv'yi yaratan akışı yazarken, yapılacak ilk şey şudur:

myStream.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length)

Soruyu okumadınız! Lyubomyr Shaydariv şöyle yazdı: "UTF-8 BOM EF BB BF'yi de belirtmeye çalıştım, ancak Excel bunu görmezden geliyor."
Elmue

Bu çalışma kodu. UTF-8 dosyalarını bu yolla .Net uygulamalarından yazarsanız, Excel dosyayı UTF8 olarak tanır.
zax

Excel'inizde çalışıyor olabilir. Ancak en azından Excel 2007'de BOM tamamen yok sayılır. Bu nedenle, tüm Excel sürümlerinde çalışan bir kod yazmak istiyorsanız, kodunuz işe yaramaz.
Elmue

2

Gerçekten şaşırtıcı bir cevap listesi, ancak oldukça iyi bir cevap eksik olduğundan, burada bahsedeceğim: csv dosyasını google sayfalarıyla açın yerel bilgisayarınıza excel dosyası olarak geri kaydedin.

Microsoft'un aksine Google, UTF-8 csv dosyalarını desteklemeyi başardı, bu nedenle dosyayı orada açmaya çalışıyor. Ve excel formatına ihracat da sadece çalışır. Bu, herkes için tercih edilen bir çözüm olmasa da, oldukça başarısızdır ve tıklama sayısı, özellikle de zaten Google'da zaten oturum açtığınızda, kulağa gelebilecek kadar yüksek değildir.


2

Bu soruyu doğru bir şekilde ele almıyor, ancak bunun üzerinde tökezlediğimden ve yukarıdaki çözümler benim için işe yaramadığı veya karşılayamadığım gereksinimlerim olduğundan, vim'e erişiminiz olduğunda BOM'u eklemenin başka bir yolu:

vim -e -s +"set bomb|set encoding=utf-8|wq" filename.csv

2

merhaba ben csv üretimi için raylar üzerinde yakut kullanıyorum. Uygulamamızda çoklu dil (I18n) için gitmeyi planlıyoruz ve Windows excel'in CSV dosyasında I18n içeriğini görüntülerken bir sorunla karşılaştık.

Linux (Ubuntu) ve mac ile iyiydi.

Gerçek verileri görüntülemek için Windows Excel'in verileri tekrar içe aktarması gerektiğini belirledik. İçe aktarma sırasında karakter setini seçmek için daha fazla seçenek elde edeceğiz.

Ancak bu her kullanıcı için eğitilemez, bu nedenle aradığımız çözüm sadece çift tıklamayla açmaktır.

Sonra aghuddleston yardımıyla excel pencerelerde açık mod ve bom verileri gösteren yolunu tespit esasından . Referans olarak eklendi.

Örnek I18n içeriği

Mac ve Linux'ta

İsveççe: Förnamn İngilizce: Adı

Windows'da

İsveççe: Fürnamn İngilizce: Adı

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

Burada dikkat edilmesi gereken önemli noktalar açık mod ve bom

open_mode = "w +: UTF-16LE: UTF-8"

bom = "\ xEF \ xBB \ xBF"

CSV yazmadan önce ürün ağacını ekleyin

f.write bom

f.write (csv_file)

Windows ve Mac

Dosya çift tıklanarak doğrudan açılabilir.

Linux (ubuntu)

Bir dosyayı açarken ayırıcı seçeneklerini sorun -> “SEKME” yi seçin resim açıklamasını buraya girin


1

Birkaç gün önce aynı problemle karşılaştım ve herhangi bir çözüm bulamadım import from csvçünkü bu özelliği kullanamıyorum çünkü her şeyi dize olarak biçimlendiriyor.

Benim çözüm önce dosyayı notpad ++ ve ile açmak oldu change the encode to ASCII. Daha sonra dosyayı excel'de açtım ve beklendiği gibi çalıştı.


1

Php sadece $ csv_string $ bom başa:

$bom = sprintf( "%c%c%c", 239, 187, 191); // EF BB BF
file_put_contents( $file_name, $bom . $csv_string );

MS Excel 2016 ile test edildi, php 7.2.4


0

Bu eski bir soru ama karşılaştığım benzer bir sorun vardı ve çözüm başkalarına yardımcı olabilir:

CSV metin verilerini bir dosyaya yazdıktan sonra sonuçta ortaya çıkan .csv dosyasını Excel'de açarken aynı metni tüm metni tek bir sütuna kaydırır. Yukarıdaki cevapları okuduktan sonra sorunu çözdüğümde aşağıdakileri denedim.

StreamWriter'ınızı oluştururken UTF-8 kodlamasını uygulayın. Bu kadar.

Misal:

using (StreamWriter output = new StreamWriter(outputFileName, false, Encoding.UTF8, 2 << 22)) {
   /* ... do stuff .... */
   output.Close();
}

@elmue biraz ayrıntılı özen? Kesinlikle CSV'yi başlamak için doğru kodlamayı kullanarak çıktılamak, iş akışında daha sonra Excel ile uyumluluk sorunu yaşanmamasını sağlar mı?
Rex

Using () deyiminiz varsa output.Close () yöntemine ihtiyacınız olmadığından kod yanlıştır. Bunun dışında Excel CSV inport çok ilkel. Ben hiç kullanmazdım. Excel'de içe aktarmak istiyorsanız bunun yerine bir HTML tablosu kullanın ve Excel'de açın.
Elmue

@Elmue açıkladığınız için teşekkürler - ne yazık ki açıkça bir kapatma yanı sıra bertaraf gereken bir dizi senaryo (ağ sürücüleri arasında dosyalar dahil) ile karşılaştım . Değil bence ben bir çağrı gördüğümü hatırlıyorum neden bir sebep buldum Close()içinde Disposeyığının ama biz oraya gitmek. Ayrıca, önerdiğiniz verimsiz HTML yaklaşımına ihtiyaç duymadığı için CSV içe aktarmanın ilkel olduğu konusundaki ifadenizde yanılıyorsunuz. Aslında, düz metin verilerini almak, HTML'ye dönüştürmek ve sonra Excel'e çekmek için ek programlı adımlar oluşturmak sezgisel görünüyor
Rex

devamı ... Ancak, farklı senaryoların farklı gereksinimleri vardır ve örneğim doğru bir şekilde OP'nin istediği gibi kodlamanın nasıl belirtileceğini gösterir
Rex

Lütfen orijinal soruyu tekrar okuyun: "UTF-8 BOM EF BB BF'yi de belirtmeye çalıştım, ancak Excel bunu görmezden geliyor." Ben aynı test ve aynı sonuca geldim: Excel UTf8 BOM tanımıyor. Dene! Bir CSV dosyası yazın ve içine Yunan veya Rus karakterleri koyun. Sonra bunu Excel'de açın ve garbarge alacaksınız. Yani cevabınız hiçbir şeyi çözmez.
Elmue

0

Tam otomatik, tek bir tıklama yapmak veya bir web sayfasından Excel'e otomatik olarak yüklemek, ancak uygun Excel dosyaları oluşturmak istemiyorsanız, alternatif olarak SYLK formatına bakmanızı öneririm. Tamam, CSV kadar basit değil, ancak metin tabanlı ve uygulanması çok kolay ve UTF-8'i sorunsuz bir şekilde destekliyor.

Verileri alan bir PHP sınıfı yazdım ve dosyayı doğrudan tıklatarak doğrudan Excel'de açılacak bir SYLK dosyası çıktı (veya dosyayı doğru mime türüne sahip bir web sayfasına yazarsanız Excel'i otomatik olarak başlatacak. biçimlendirme ekleyin (kalın, belirli şekillerde sayıları vb. gibi) ve sütun boyutlarını veya sütunlardaki metne otomatik boyut sütunlarını değiştirin ve tüm koddaki tüm kodlar muhtemelen yaklaşık 100 satırdan fazla değildir.

Basit bir elektronik tablo oluşturarak ve SYLK olarak kaydedip bir metin düzenleyici ile okuyarak SYLK'yi tersine çevirmek kolaydır. İlk blok, tanıyacağınız üstbilgiler ve standart sayı biçimleridir (oluşturduğunuz her dosyada yeniden oluşturduğunuz), daha sonra veriler basitçe bir X / Y koordinatı ve bir değerdir.


0
  1. LibreOffice Calc'i indirin ve yükleyin
  2. Seçtiğiniz csv dosyasını LibreOffice Calc'de açın
  3. Metin içe aktarma sihirbazının gösterdiği göklere şükürler olsun ...
  4. ... sınırlayıcı ve karakter kodlama seçeneklerinizi belirleyin
  5. Calc içinde elde edilen verileri seçin ve yapıştırmayı Excel'e kopyalayın

0

Basit bir C # uygulamasından csv dosyaları üretiyorum ve aynı sorunu vardı. Benim çözüm dosyanın UTF8 kodlaması ile yazıldığından emin olmaktı:

// Use UTF8 encoding so that Excel is ok with accents and such.
using (StreamWriter writer = new StreamWriter(path, false, Encoding.UTF8))
{
    SaveCSV(writer);
}

Başlangıçta aksanları Notepad ++ ile iyi görünmekle birlikte Excel'de karıştırılmış olan aşağıdaki kodu aldım:

using (StreamWriter writer = new StreamWriter(path))
{
    SaveCSV(writer);
}

Kilometreniz değişebilir - Office 365'ten .NET 4 ve Excel kullanıyorum.


0

Office 365 için çalışma çözümü

  • kaydet UTF-16(LE, BE yok)
  • ayırıcı kullan \t

PHP'deki kod

$header = ['číslo', 'vytvořeno', 'ěščřžýáíé'];
$fileName = 'excel365.csv';
$fp = fopen($fileName, 'w');
fputcsv($fp, $header, "\t");
fclose($fp);

$handle = fopen($fileName, "r");
$contents = fread($handle, filesize($fileName));
$contents = iconv('UTF-8', 'UTF-16', $contents);
fclose($handle);

$handle = fopen($fileName, "w");
fwrite($handle, $contents);
fclose($handle);

-1

İlk önce Excel elektronik tablosunu Unicode metin olarak kaydedin. Internet explorer kullanarak TXT dosyasını açın ve "Farklı Kaydet" i tıklayın TXT Kodlama - uygun kodlamayı seçin, yani Win Cyrillic 1251 için


-1

Ben bu iş parçacığı ve benzeri bulabildiğim her şeyi denedim, hiçbir şey tam olarak çalıştı. Ancak, google sayfalarına aktarma ve sadece csv olarak indirme bir cazibe gibi çalıştı. Hayal kırıklığı noktama gelirsen dene.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.