ডাব্লুসি-এম এবং ডাব্লুসি-সি আলাদা কেন?


12

সি প্রোগ্রামার হিসাবে আমি অবাক হয়ে দেখলাম যে wc -c(যা বাইটের সংখ্যা গণনা করে), এবং wc -m(যা অক্ষরের সংখ্যা গণনা করে) আউটপুটটি আমার দীর্ঘ, টেক্সট ফাইলের জন্য খুব আলাদা ফলাফলের জন্য। আমাকে সর্বদা বলা হয়েছিল যে sizeof(char)1 বাইট।

qdii@nomada ~/Documents $ wc -c sentences.csv
102990983 sentences.csv
qdii@nomada ~/Documents $ wc -m sentences.csv
89023123 sentences.csv

কোন ব্যাখ্যা?


নীচে @ রিচির উত্তর দেখুন ... আপনি আপনার প্রশ্নের (সি = বাইটস, মি = অক্ষর) পিছনে আপনার -m এবং -c পতাকা পেয়েছেন ... যদিও আপনার উদাহরণ আউটপুট সঠিক।
ড্যান

উত্তর:


20

charসি টাইপ এক বাইট, কিন্তু এটা ASCII অক্ষর জন্য দেয়ার উদ্দেশ্যে করা হচ্ছে; আছে পরিবর্তনশীল প্রস্থ এনকোডিং হল UTF-8 যে অক্ষর প্রতি অনেক বাইট পর্যন্ত সময় লাগতে পারে মত। মাল্টিবাইট সিকোয়েন্সগুলি ডিকোড wcকরতে mbrtowc(3)ফাংশনটি LC_CTYPEএনভায়রনমেন্ট ভেরিয়েবলের দ্বারা সেট করা লোকেলের উপর নির্ভর করে ব্যবহার করে । আপনি যদি লোকেলটি সঠিকভাবে সেট করেন তবে সমস্ত ক্ষেত্রে আপনার একই ফল পাওয়া উচিত। উদাহরণ স্বরূপ:

qdii@nomada ~/Documents $ LC_CTYPE="C" wc -m sentences.csv
102990983 sentences.csv

16

এক অনুমানে,

  1. আপনার লোকেল ইউটিএফ -8 এনকোডিং এবং ব্যবহার করে

  2. আপনার ফাইলের প্রায় 10% অক্ষর নিয়ে গঠিত যা ইউটিএফ -8 এ এনকোড করার জন্য এক অক্টেটের বেশি প্রয়োজন।

যাইহোক, থেকে man wc:

   -c, --bytes
          print the byte counts

   -m, --chars
          print the character counts
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.