UTF-8 CSV dosyalarında Malzeme Listesi (bayt sipariş işareti) bulunmalı mıdır?


37

İş kolu yazılımımız, kullanıcının belirli verileri CSV olarak kaydetmesini sağlar . Vahşi ortamda kullanılan pek çok farklı format (tümü "CSV") olduğundan, "varsayılan format" ın nasıl görünmesi gerektiğine karar veriyoruz.

  • Hat / alan ayırıcıları ve kaçma ile ilgili olarak kullanabileceğimiz bir standart var: RFC 4180 .

  • Metin kodlaması ile ilgili olarak, UTF-8'in son on yılda "varsayılan metin dosyası formatı" olarak ortaya çıktığı görülüyor, bu yüzden bunu kullanacağız.

Açık bırakılan tek soru şudur: Başlangıçta bir malzeme listesi ekleyip eklememeli miyiz ? BOM'ların kullanımıyla ilgili olarak çok sayıda görüş ve artı / eksileri okudum, ancak BMS dosyalarının BYS dosyalarında kullanımı hakkında "resmi" bir öneri veya en azından bir tür topluluk fikir birliği var mı?


7
Bir malzeme listesi varsa, UTF-8 değildir. Fakat programlar hangi formatı istiyor? Bir Malzeme Listesine (çoğunlukla mikro-temele) ihtiyaç duyuyorlarsa, bir tane eklemelisiniz, fakat UTF-8 + BOM ≠ UTF-8.
ctrl-alt-delor

3
CSV'nin görünüşte daha kolay olmasına rağmen, çok fazla uyumluluk sorunu var, özellikle de saf 7-bit ASCII'den mahrum kalıyorsanız, kullanıcıların açması için gerçek XLSX'i üretmenizi şiddetle tavsiye ederim. Excel'de (başka bir yazılımda yeniden içe aktarmak yerine, bu durumda ayırıcılar, kodlamalar vb. için seçenekler vermeniz gerekir). Dışarıdaki çoğu dil için kütüphaneler var ve sizi ve kullanıcılarınızı çok zaman kazandıracaksınız.
jcaron

2
CSV yolunu izlerseniz, dosyayı hem Mac'te hem de PC'de açtığınızda, Excel'in çeşitli sürümlerinde ideal olarak ne olacağını kontrol edin. Ayrıca, Excel'in bazı sürümlerinin, dosyayı açmak veya dosyayı menüden açmak için çift tıkladığınızda aynı şekilde davranmadığını unutmayın.
jcaron

2
Excel'de doğru açılıp açılmadığı neden önemlidir?
Soruda

Yanıtlar:


55

UTF-8 için değil , yorumlardaki çeşitli uyarıları görün.

UTF-16 / 32'den farklı olarak gereksiz (UTF-8'in bayt sırası yoktur) ve Unicode standardında önerilmez . UTF-8'i BOM ile "vahşi doğada" görmek de oldukça nadirdir, bu nedenle geçerli bir nedeniniz olmadığı sürece (örneğin, yorumlandığı gibi, BOM'u bekleyen bir yazılımla çalışacaksınız) BOM'suz yaklaşımı öneriyorum .

Vikipedi , bir Malzeme Listesini zorlayan ve bekleyen bazı Microsoft yazılımlarından bahseder, ancak onlarla birlikte çalışmadıkça kullanmayın.


28
BOM gerektiren yaygın bir yazılım da var: Excel'in bir CSV dosyasını "ANSI" yerine UTF-8 olarak doğru bir şekilde tanımlaması için bir BOM'a, yani yerel uyumluluk yerel ayarına ihtiyacı var. (Ancak Excel aynı zamanda böyle bir dosyayı kaydederken garip şeyler de yapar ; bu nedenle, dosyayı Excel ile açmak istiyorlarsa CSV dışa aktarımı yerine "gerçek" Excel dışa
aktarmamızı kullanmalarını öneririz

21
@Heinzi Uzun zaman önce CSV ve Excel ile çalışırken gerçekten kazanamayacağınızı öğrendim. Bu sadece berbat bir CSV okuyucu. Çok kötü, normal kullanıcıların beklediği şey.
boru:

9
@Voo: UTF-8 için bir malzeme listesi istemek, kesinlikle " ne gerek ne de tavsiye edilmez " olduğunu dikkate alarak standardı ihlal ediyor .
Deduplicator

12
@Deduplicator: MS-DOS ve Windows sistemleri UTF-8 dışındaki kodlamalarda büyük miktarda eski metin dosyasına sahiptir. Kaliteli uygulamalar, kullanıcının bir metin dosyasını açarken nasıl kodlanacağını belirlemesine izin verir, ancak genellikle bir "otomatik" seçeneği içerir. Bir kullanıcı "UTF-8" i seçerse, UTF-8 dosyası BOM ile veya BOM olmadan doğru bir şekilde açılır. Bir kullanıcı "otomatik" seçerse, BOM olmayan bazı UTF-8 dosyaları başka bir kodlamanın kullanılması ile yanlış tanımlanabilir. Bir uygulamanın farklı bir şey yapmasını bekleyeceğinden emin değilim, çünkü "yanlış tanımlanmış" dosyaları birebir aynı olabilir ...
supercat

7
@Voo: Bu, Malzeme Listesinin yasa dışı olduğu diğer birçok format şartı ile çakışmaktadır. Örneğin #!, geçersiz önce BOM ile bir kabuk betiği . En iyi ihtimalle UTF-8'deki bir ürün reçetesine "izin verilmez, formata / uygulamaya özel gereksinim gerektirmediğinde" izin verilir "ve bu nedenle kullanılmamalıdır. Standartlar aslında YOK OLMAMALIDIR.
R. ..

8

AFAIK halen yaygın bir kongre bulunmamakla birlikte, kesinlikle UTF-8 genel olarak kabul görmektedir.

Malzeme Listesi korkunç bir eserdir:

Görünmez (sıfır genişliğinde).

Bazı yazılımlar, yalnızca harf içermeyen, ancak önündeki garip malzeme listesinin ilk sütun adını bozabilir.

Başlık satırı, birinci değeri bozan değer satırları için kopyalanabilir.

Yalnızca bazı Windows yazılımları, bu yerel Windows makinesi tarafından kullanılan ANSI kodlamalarından birini ve UTF-8'i ayırt etmek için gereklidir. Not Defteri, Excel.

Yani üzücü olan şey, bir ürün reçetesini desteklemesi gerektiğidir. Belki isteğe bağlı.

Dosyalar için bir adlandırma şeması kullanın (...- utf8.txt, ...- utf8bom.txt).


Çoğu durumda HTML'yi dışa aktarma alternatifi olarak kullanabiliriz . Bu, dosyadaki kodlamayı ayarlamaya izin verir. Ekstra bir özellik, sıraların ve hücrelerin arka plan / ön plan renklendirmesidir. Hangi ihracatın kalitesini yükseltir.


15
Biçimlendirmenin "dışa aktarma kalitesini yükseltirken" olması, dosyanın kullanım amacına büyük ölçüde bağlıdır. CSV genellikle basit bir makine tarafından okunabilir format olarak kullanılır ve alıcının HTML'yi ayrıştırması , bu durumda büyük bir dezavantaj olur.
IMSoP

5
Bir adlandırma düzeni seçiyorsanız, izleyiciyi aklınızda bulundurun. -utf8-windows.csvdaha iyi. Neredeyse herkes, Windows'un bağlamında, bilgisayarlar bağlamında bilir, ancak çok daha az kullanıcı bir Bayt Sipariş İşaretinin ne olduğunu bilir.
MSalters

2
@Davislor evet, yaygın olarak bildirilen bilinen bir standartsa. Aksi halde tschüß, çöp tschüßolması konusunda hata raporları gelecek, ancak yazılmalıydı. StackOverflow'ta birçok IT hatası kodlamalarla ilgilidir. Son kullanıcılar da sorun yaşayacak.
Joop Eggen

3
@ JoopEggen Tam olarak hangi toplulukta "Yaygın olarak bilinen iletişim standardı"? Neredeyse 10 yıldır yazılım geliştirme yapıyorum ve bunu daha önce hiç görmedim - hatta pencerelerde ve kesinlikle her zaman utf-8 ile ilgilendiğiniz Linux veya OSX'te bile .
Kübik

1
@JustinTime evet, hatta birkaç yıldan beri, daha önce değil. MS geliştiricileri o kadar da kötü değil (Posix uyumluluğu, şimdi UTF-8 desteği).
Joop Eggen
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.