Malzeme Listesiyle başlayan bir dosyayı işleme (FF FE)


11

FF FEMalzeme Listesiyle birlikte bir .csv dosyası aldım :

$ head -n1 dotan.csv | hd
00000000  ff fe 41 00 64 00 20 00  67 00 72 00 6f 00 75 00  |..A.d. .g.r.o.u.|

awkAyrıştırmak için kullanırken bayt sırasından kaynaklandığından şüphelendiğim bir sürü boş bayt alıyorum. Normal dosyaların çalışabilmesi için bu dosyadaki (CLI'yi kullanarak) bayt sırasını nasıl değiştirebilirim?

Bu dosyanın (BOM hariç) sadece ASCII karakterler olduğunu grepdüşünüyorum, ancak ikili bir dosya olduğunu düşünüyor gibi teyit edemez :

$ grep -P '^[\x00-\x7f]' dotan.csv 
Binary file dotan.csv matches

VIM'de aynı dizeyi aramak her karakter eşleşmesini gösterir !

iconvASCII'ye dönüştürmek için kullanmak \ x00 değerlerinden kurtulmaz, aslında UTF-8 yerine null bayt gibi göründükleri için problemi daha da kötüleştirir!

$ iconv -f UTF-8 -t ASCII dotan.csv > fixed.txt 
iconv: illegal input sequence at position 0

$ iconv -f UTF-8 -t ASCII//IGNORE dotan.csv > fixed.txt

$ head -n1 fixed.txt | hd
00000000  41 00 64 00 20 00 67 00  72 00 6f 00 75 00 70 00  |A.d. .g.r.o.u.p.|

Normal dosyaların çalışabilmesi için bu dosyadaki (CLI'yi kullanarak) bayt sırasını nasıl değiştirebilirim?


Windows veya Mac'te oluşturduğunuz CSV dosyası?
cuonglm

Dosyanın bir kısmını verebilir misiniz?
cuonglm

Dosyanın benzersiz sorunlarını koruyan anonimleştirilmiş bir bölümüne bir bağlantı . Teşekkür ederim!
dotancohen

Yanıtlar:


16

Bundan wikipedia makalede , FF FEdemektir UTF16LE. Eğer söylemelidir Yani iconvdönüştürmek için UTF16LEiçin UTF8:

iconv -f UTF-16LE -t UTF-8 dotan.csv > fixed.txt

Mükemmel, teşekkürler! UTF-8 ve UTF-16 BOM karıştı: FFFE ve FEFF'in UTF-8 olduğunu düşündüm ve UTF-16 BOM'ları hiç bilmiyordum. Aslında, bunlar UTF-16 BOM'ları ve UTF-8 BOM!
dotancohen

@dotancohen: Fedora'mda test ediyorum ve tailçözüm iyi çalışıyor. Hangi işletim sistemini kullanıyorsunuz?
cuonglm

Bu, Windows'ta Git Bash'te "iconv (GNU libiconv 1.14)" sürümü için çalışmıyor (yani BOM'u kaldırın). Ancak (herhangi bir nedenle) UTF-16bayt sırası sürümlerinden birini kullanmak yerine çalışır.
Kenny Evitt

4

dos2unix ayrıca Malzeme Listelerini kaldırır ve UTF-16'yı UTF-8'e dönüştürür:

$ printf %s あ|recode ..utf16 >a;xxd -p a;dos2unix a;xxd -p a
feff3042
dos2unix: converting file a to Unix format...
e38182

dos2unix ayrıca UTF-8 Malzeme Listelerini kaldırır:

$ printf %b '\xef\xbb\xbfa'>a;dos2unix a;xxd -p a
dos2unix: converting file a to Unix format...
61

0

StackOverflow üzerinde de cevaplandı: UTF-8 dosyasından BOM nasıl kaldırabilirim? @rici'nin iyi bir cevabı var.

Kısa cevap:

  • Kısa cevap: sed -i $'1s/^\uFEFF//' file.txtBSD veya OS / X'de değil.
  • Başka cevap: vi file.txt, :set nobomb, :w, basit ama manuel
  • Dos2unuix'i kurun; dos2unix -r file.txt
  • Bu işaretler, dosyanın UTF-8 olması da dahil olmak üzere birkaç olası anlama sahiptir; Wikipedia Makalesine bakınız .
  • Windows programları bu işaretleri eklemeyi sever. Çoğu editör bu işaretleri kaldırmaz.
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.