আইকনভিও বিওএম সহ ইউটিএফ -16 উত্পাদন করছে


11

এই প্রশ্নের দ্বারা অনুপ্রাণিত হয়ে , আমি iconvবিএমএস দিয়ে এবং নির্দিষ্ট অন্তর্নিহিততার সাথে ইউটিএফ -16 আউটপুট উত্পন্ন করতে কমান্ডটি ব্যবহার করতে পারি ?

iconvঅন্য এক এনকোডিং থেকে কমান্ড ধর্মান্তরিত পাঠ্য।

উদাহরণ স্বরূপ:

echo hello | iconv -f ascii -t utf-16

এর UTF-16 উপস্থাপনা উত্পন্ন করে "hello\n"

ইউটিএফ -16 ফাইলগুলি প্রায়শই, তবে সর্বদা নয়, বাইট অর্ডার মার্ক (বিওএম) দিয়ে শুরু করুন যা ইউনিকোড চরিত্রের 2-বাইট এনকোডিং U+FEFF। আপনি চেক প্রথম দুই বাইট কিনা দ্বারা BOM সঙ্গে একটি হল UTF-16 ফাইলের endianness নির্ধারণ করতে পারেন FE FFবা FF FE

iconvকমান্ড হল UTF-16 আউটপুট জেনারেট করার জন্য বেশ কিছু অপশন রয়েছে:

$ iconv --list | grep -i utf-16
UTF-16//
UTF-16BE//
UTF-16LE//

এই আদেশ:

echo hello | iconv -f ascii -t utf-16be

বিওএম ছাড়াই বিগ-এন্ডিয়ান ইউটিএফ -16 উত্পন্ন করে ; দেখে মনে হচ্ছে যে আপনি যদি শেষের দিকটি নির্দিষ্ট করে থাকেন তবে আপনাকে আউটপুটে এটি নির্দেশ করার দরকার নেই। একইভাবে, utf-16leবিওএম ছাড়াই লিটল-এডিয়ান ইউটিএফ -16 উত্পন্ন করে।

এই:

echo hello | iconv -f ascii -t utf-16

(আমার x86 উবুন্টু সিস্টেমে) বিওএম সহ লিটল এন্ডিয়ান ইউটিএফ -16 উত্পন্ন করে - তবে আমি একটি বিএম-এর সাথে বিগ-এন্ডিয়ান ইউটিএফ -16 জেনারেট করার অনুরূপ একটি কমান্ডের রিপোর্ট দেখেছি, এমনকি সামান্য-এডিয়ান সিস্টেমেও।

আমি সবসময় ম্যানুয়ালি বিওএম ব্যবহার করতে পারি utf-16beবা utf-16leপ্রেন্ডেন্ড করতে পারি তবে আমি এমন একটি সমাধান খুঁজছি যা কেবল iconvকমান্ডটি ব্যবহার করে ।

আরেকটি কর্মসূচী, যদি আপনি জানেন যে শেষেরতাটি কী -t utf-16উত্পন্ন করে, তা হ'ল:

echo hello | iconv -f ascii -t utf-16 | dd conv=swab 2>/dev/null

আমি যা ব্যবহার করতে চাই তা হ'ল:

iconv -f ascii -t utf-16bebom # big-endian with BOM
iconv -f ascii -t utf-16lebom # little-endian with BOM

কিন্তু iconvএটি সমর্থন করে না।

সম্পাদনা:

X86 ম্যাক ওএসএক্স সিস্টেমে অ্যাক্সেস সহ কেউ কি নীচের কমান্ডের (অনুলিপি-আটকানো) আউটপুট দেখাচ্ছে এমন মন্তব্য পোস্ট করতে পারেন?

echo hello | iconv -f ascii -t utf-16 | od -x

1
একটি বিওএম ডেটার বহনযোগ্যতা হ্রাস করে তবে আপনি এটিকে এটি যুক্ত
রেডগ্রিটিব্রিক

@ রেডগ্রিটিট্রিক: এটি কীভাবে বহনযোগ্যতা হ্রাস করে (বিশেষত ইউটিএফ -১ 16 এর জন্য)? আমি জানি আমি স্পষ্টভাবে বিওএম তৈরি করতে পারি; আমি কেবল ব্যবহার করে এটি করার জন্য একটি উপায় খুঁজছি iconv- এবং কেন অবাক হয়ে যায় -t utf-16বলে মনে হচ্ছে অবাক হয়ে যায়।
কিথ থম্পসন

আমার ধারণা, আইকনভি বর্তমান প্ল্যাটফর্মের বাইট-অর্ডারটি ধরে নিয়েছে যদি আপনি এটিকে স্পষ্টভাবে উল্লেখ না করেন। উইন্ডোজ ব্যতীত কিছু প্ল্যাটফর্মে, কিছু পাঠ্য প্রক্রিয়াজাতকরণ সরঞ্জামগুলি বিওএমগুলি আশা করে না এবং তাই ভুল কাজটি করে। পাঠ্য ফাইলগুলিকে সংযুক্ত করার সময়, বা সামগ্রী তৈরি করতে ফাইল-ভিত্তিক টেম্পলেটগুলি ব্যবহার করার সময় একটি উদাহরণ হতে পারে। "আইএএনএ নিবন্ধিত অক্ষরগুলি ইউটিএফ -16 বিই এবং ইউটিএফ -16 এলএর জন্য, বাইট অর্ডার চিহ্ন ব্যবহার করা উচিত নয় কারণ এই চরিত্রের সেটগুলির নামগুলি ইতিমধ্যে বাইট ক্রম নির্ধারণ করে"
রেডগ্রিটিব্রিক

এই প্রশ্নটি দেখায় iconv -f UTF-8 -t UTF-16, একটি বিওএম সহ বিগ-এন্ডিয়ান ইউটিএফ -১ gene তৈরি করে সামান্য-এন্ডিয়ান সিস্টেম (ম্যাকোস) চালান, যা খুব অদ্ভুত বলে মনে হয়।
কিথ থম্পসন

উত্তর:


9

না , আপনি যদি বাইট ক্রম নির্দিষ্ট করে থাকেন তবে কোনওiconv বিওএম .োকানো হবে না।

এটি ইউনিকোড কনসোর্টিয়ামের

প্রশ্ন: বিএমএস নিয়ে আমার কীভাবে আচরণ করা উচিত?

উত্তর: অনুসরণ করার জন্য এখানে কিছু গাইডলাইন রয়েছে:

  1. একটি নির্দিষ্ট প্রোটোকল (যেমন। টেক্সট ফাইলগুলির জন্য মাইক্রোসফ্ট কনভেনশন) ফাইলের মতো কিছু ইউনিকোড ডেটা স্ট্রিমগুলিতে বিওএম ব্যবহারের প্রয়োজন হতে পারে। আপনার যখন এই জাতীয় প্রোটোকলের সাথে সামঞ্জস্য করা দরকার তখন একটি বিওএম ব্যবহার করুন।
  2. কিছু প্রোটোকল অবিকৃত পাঠ্যের ক্ষেত্রে Bচ্ছিক বিওএমগুলিকে অনুমতি দেয়। এই ক্ষেত্রে,
    • যেখানে একটি পাঠ্য ডেটা স্ট্রিমটি সরল পাঠ্য হিসাবে পরিচিত, তবে অজানা এনকোডিংয়ের ক্ষেত্রে, বিওএম স্বাক্ষর হিসাবে ব্যবহার করা যেতে পারে। যদি বিওএম না থাকে তবে এনকোডিং কিছু হতে পারে।
    • যেখানে কোনও পাঠ্য ডেটা স্ট্রিম প্লেইন ইউনিকোড পাঠ্য হিসাবে পরিচিত (তবে কোন এন্ডিয়ান নয়) তবে বিওএম স্বাক্ষর হিসাবে ব্যবহার করা যেতে পারে। যদি বিওএম না থাকে তবে পাঠ্যটি বড়-এন্ডিয়ান হিসাবে ব্যাখ্যা করা উচিত।
  3. কিছু বাইট ভিত্তিক প্রোটোকল একটি ফাইলের শুরুতে ASCII অক্ষর আশা করে। যদি এই প্রোটোকলগুলির সাথে ইউটিএফ -8 ব্যবহার করা হয় তবে এনওডিং ফর্ম স্বাক্ষর হিসাবে বিওএম ব্যবহার করা এড়ানো উচিত।
  4. যেখানে ডেটা স্ট্রিমের সুনির্দিষ্ট প্রকারটি জানা যায় (যেমন ইউনিকোড বিগ-এডিয়ান বা ইউনিকোড লিটল-এন্ডিয়ান), বিওএম ব্যবহার করা উচিত নয়। বিশেষত, যখনই কোনও ডেটা স্ট্রিমটি ইউটিএফ -16 বিই হিসাবে ঘোষণা করা হয়, ইউটিএফ-16 এলই, ইউটিএফ -32 বিই বা ইউটিএফ -32 এলই একটি বিওএম ব্যবহার করা উচিত নয়

(আমার জোর)

আমি আশা করি iconvএই নির্দেশিকাগুলির শেষের প্রতি বিশ্বস্ত হওয়ার চেষ্টা করা হচ্ছে।


হালনাগাদ.

একটি ডিগ্রেশন

আমার মতে:

  1. একটি বিওএম নির্দিষ্ট করার জন্য একটি বিকল্প অবশ্যই আইকনভের জন্য একটি দরকারী অতিরিক্ত বৈশিষ্ট্য হবে।

  2. একটি BOM ছাড়া একটি হল UTF-16LE ফাইল হয় কখনও কখনও অতিরিক্ত প্রচেষ্টার সঙ্গে যদ্যপি উইন্ডোজে ব্যবহারযোগ্য। উদাহরণস্বরূপ নোটপ্যাডের ফাইল ওপেন কথোপকথন আপনাকে "ইউনিকোড" নির্বাচন করতে দেয় যা মাইক্রোসফ্টের নাম "ইউটিএফ -16 এলই" এর জন্য এবং (অবাক হওয়ার মতো) কোনও বিওএম ছাড়াই ফাইলগুলিতে কাজ করে।

  3. আমি উইন্ডোজ নোটপ্যাডে (এক্সপি) উইন্ডোজ নোটপ্যাডে (এক্সপি) একটি ইউটিএফ -16 এলই টেস্ট ফাইল (বিওএম ছাড়াই) বা একটি ইউটিএফ -8 টেস্ট ফাইল (বিওএম ছাড়াই) খুলতে পারি যেমন এক্সপ্লোরারটিতে ফাইলটির নাম ডাবল ক্লিক করে। এটি আমার কাছে ব্যবহারযোগ্য বলে মনে হচ্ছে। আমি সচেতন যে কখনও কখনও উইন্ডোজ এনকোডিংটি ভুলভাবে অনুমান করতে পারে - এই ক্ষেত্রে ফাইলটি খোলার সময় আপনাকে নোটপ্যাডকে এনকোডিংটি বলতে হবে। এই অসুবিধার অর্থ উইন্ডোজে ব্যবহারের উদ্দেশ্যে টেক্সট ফাইলগুলির জন্য একটি বিওএম সহ আরও ভাল।

  4. যদি কোনও নির্দিষ্ট অ্যাপ্লিকেশন বিওএম-এর সাথে কোনও ইউটিএফ -১LE এলএ ফাইল ব্যতীত অন্য কোনও কাজ না করে, তবে আমি সম্মত হব যে বিএমএস ছাড়াই কোনও ইউটিএফ -১LE এলই ফাইল সেই নির্দিষ্ট অ্যাপ্লিকেশনের জন্য ব্যবহারযোগ্য নয়।

  5. আমি সন্দেহ করি যে আপনি যদি ইউটিএফ -8 (বিওএম ছাড়াই) সমস্ত কিছু করতে পারেন তবে দীর্ঘমেয়াদে এটিই সেরা সমাধান।

যাইহোক, " আমি কোনও বিওএম এবং নির্দিষ্ট প্রান্তিকতা সহ ইউটিএফ -16 আউটপুট উত্পন্ন করতে আইকনভিভি কমান্ডটি ব্যবহার করতে পারি " বর্তমানে " নেই "।


1
এবং প্রথম নির্দেশিকা সম্পর্কে কি, এ 1? যদি আমি কোনও ইউনিকোড পাঠ্য ফাইল তৈরি করতে চাই যা একটি x86 উইন্ডোজ সিস্টেমে ব্যবহারযোগ্য, তবে এটি একটি বিওএম সহ একটি সামান্য এন্ডিয়ান ইউটিএফ 16 ফাইল হওয়া উচিত ।
কিথ থম্পসন

@ কিথথম্পসন: সিস্টেমগুলি UTF16LE এবং UTF16BE উভয়ই গ্রহণ করতে পারে accept কমপক্ষে উইন্ডোজ নোটপ্যাড উভয়ই গ্রহণ করে, যখন বিষয়টি আসে .txt- যতক্ষণ না ফাইলটির একটি বিওএম থাকে।
ব্যবহারকারীর 6868 20

@ কিথথম্পসন: আমি সম্মত হই যে গাইডলাইন 1টি অগ্রাধিকার নেওয়া উচিত, তবে আইকনভিও আপনাকে কোনও বিওএম নির্দিষ্ট করার উপায় সরবরাহ করে না। আপনার মূল প্রশ্নের উত্তর কেবল "না"।
রেডগ্রিটিব্রিক

আমি যে উত্তরটির জন্য প্রত্যাশা করছিলাম তা নয়, একটি উত্তর এবং একটি সম্পূর্ণ উত্তর!
কিথ থম্পসন

2
এই উত্তরটি আমাকে সাহায্য করেছে - আমাকে কেন খারাপ করা হয়েছে তা শিখতে সহায়তা করেছে। রেজিস্ট্রি থেকে রফতানি / আমদানির জন্য স্ট্যান্ডার্ড উইন্ডোজ প্রোগ্রামটি C:\Windows\System32\reg.exeBOM এর সাথে ইউটিএফ -১ LE এলই রফতানি করে এবং কেবল বিএম-এর সাথে ইউটিএফ -১ LE টি পড়বে - বিএম ছাড়াই ইউটিএফ -১ LE এলই পড়বে না এবং বিএমএফের সাথে ইউটিএফ -১ read পড়বে না - অন্য কথায়, এটি পড়ার সময় বিওএমের দাবি করে তবে এটি সঠিকভাবে হ'ল ভাল! (ভাগ্যক্রমে, এটি ইউটিএফ -8 পড়ে))
ডেভিডবাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.