একটি ফাইল প্রক্রিয়া করুন যা একটি বিওএম (এফএফ এফ) দিয়ে শুরু হয়


10

আমি FF FEবিওএম এর সাথে একটি .csv ফাইল পেয়েছি :

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

যখন ব্যবহার awkআমি নাল বাইট, যা আমি সন্দেহ একটি গুচ্ছ পেয়ে করছি এটা বিশ্লেষণ করতে বাইট আদেশের কারণে হয়। আমি কীভাবে এই ফাইলটিতে বাইট অর্ডারটি (সিএলআই ব্যবহার করে) অদলবদল করতে পারি যাতে সাধারণ সরঞ্জামগুলি এটির সাথে কাজ করে?

মনে রাখবেন যে আমি মনে করি যে এই ফাইলটি কেবলমাত্র ASCII অক্ষর (বিওএম ব্যতীত) তবে আমি এটি নিশ্চিত করতে পারি না grepযে এটি বাইনারি ফাইল বলে মনে করে:

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

ভিআইএম-তে একই স্ট্রিং অনুসন্ধান করা প্রতিটি চরিত্রের মিল দেখায় !

iconvASCII তে রূপান্তর করতে ব্যবহার করে \ x00 মানগুলি থেকে মুক্তি পাওয়া যায় না, আসলে এটি সমস্যাটিকে আরও খারাপ করে তোলে কারণ এখন তারা ইউটিএফ -8 এর পরিবর্তে নাল বাইটের মতো দেখায়!

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

আমি কীভাবে এই ফাইলটিতে বাইট ক্রমটি পরিবর্তন করতে পারি (সিএলআই ব্যবহার করে) যাতে সাধারণ সরঞ্জামগুলি এটির সাথে কাজ করে?


আপনি উইন্ডোজ বা ম্যাকের তৈরি সিএসভি ফাইল?
cuonglm

আপনি ফাইলের একটি অংশ দিতে পারেন?
cuonglm

এখানে ফাইলটির একটি অনামী অংশের লিঙ্ক রয়েছে যা এটির সাথে অনন্য সমস্যাগুলি সংরক্ষণ করে। ধন্যবাদ!
dotancohen

উত্তর:


16

এই উইকিপিডিয়া নিবন্ধ থেকে , FF FEমানে UTF16LE। তাই আপনি যদি বলা উচিত iconvথেকে রূপান্তর করতে UTF16LEকরতে UTF8:

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

নিখুঁত তোমাকে ধন্যবাদ! আমি ইউটিএফ -8 এবং ইউটিএফ -16 বিওএম মিশ্রিত করেছি: আমি ভেবেছিলাম যে এফএফএফই এবং এফএফএফটি ইউটিএফ -8 এবং আমি কখনও ইউটিএফ -16 বিওএমকে জানতাম না knew আসলে, সেগুলি ইউটিএফ -16 বিওএম এবং আমি কখনই (অকেজো) ইউটিএফ -8 বিওএমটি জানতাম না!
dotancohen

@ ডোটানকোহেন: আমি আমার ফেডোরায় পরীক্ষা করি এবং tailসমাধানটি ভাল কাজ করে। আপনি কোন ওএস ব্যবহার করবেন?
cuonglm

এটি উইন্ডোজের গিট ব্যাশে সংস্করণ "আইকনভ (জিএনইউ লিবিকনভ 1.14)" সংস্করণের জন্য (যেমন বিওএম অপসারণ) কাজ করে না। কিন্তু (যে কারণেই হোক) কেবলমাত্র UTF-16বাইট-অর্ডার সংস্করণগুলির পরিবর্তে ব্যবহার করে।
কেনি এভিট

3

dos2unix বিওএমগুলিও সরিয়ে দেয় এবং ইউটিএফ -16 কে ইউটিএফ -8 এ রূপান্তর করে:

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

dos2unix ইউটিএফ -8 বিওএমগুলিও সরায়:

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

0

স্ট্যাকওভারফ্লোতেও উত্তর দেওয়া হয়েছে: আমি কীভাবে কোনও ইউটিএফ -8 ফাইল থেকে বিওএম সরিয়ে ফেলতে পারি? @rici একটি ভাল উত্তর আছে।

সংক্ষিপ্ত উত্তর:

  • সংক্ষিপ্ত উত্তর: sed -i $'1s/^\uFEFF//' file.txt তবে বিএসডি বা ওএস / এক্স এ নয়।
  • আরেকটি উত্তর: vi file.txt, :set nobomb,:w , সহজ কিন্তু ম্যানুয়াল
  • ডস 2 ইউনিক্স ইনস্টল করুন; dos2unix -r file.txt
  • এই চিহ্নগুলির একাধিক সম্ভাব্য অর্থ রয়েছে যার মধ্যে রয়েছে ফাইলটি কেবল ইউটিএফ -8; দেখতে Wikipedia নিবন্ধটি
  • উইন্ডোজ প্রোগ্রামগুলি এই চিহ্নগুলি যুক্ত করতে পছন্দ করে। বেশিরভাগ সম্পাদক এই চিহ্নগুলি সরাবেন না।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.