تخزن أجهزة الكمبيوتر الأحرف عن طريق تعيينها إلى قيم ثنائية مختلفة. لعرضها بشكل صحيح، تحتاج إلى معرفة كيفية ترميزها. يحول الأمر iconv الملف إلى ترميز جديد.
إنه ثنائي طوال الطريق إلى الأسفل
بغض النظر عن نوع البيانات التي يعمل عليها الكمبيوتر أو يخزنها، يتم تخزينها كمعلومات ثنائية. يتم تخزين الصور والنصوص والموسيقى والفيديو وكل شيء آخر كبيانات ثنائية. سواء كانت البيانات على جهاز تخزين أو محملة في ذاكرة الكمبيوتر، فإنها لا تزال ممثلة بقيم ثنائية.
إذا كانت البيانات عبارة عن نص، ونريد عرض هذا النص على الشاشة، فهناك ترجمة يجب أن تتم لتحويل القيم الثنائية إلى أحرف. لإجراء الترجمة، نحتاج إلى معرفة القيم التي تم استخدامها لتمثيل كل حرف عند إنشاء البيانات. يمكن للبرنامج بعد ذلك العمل بشكل عكسي وربط القيم الرقمية المخزنة بالأحرف مرة أخرى.
نظرًا لأن النجاح يعتمد على معرفة نوع التعيين المستخدم والالتزام الصارم بقواعد التعيين أثناء إنشاء البيانات واستخدامها، فقد تم إنشاء معايير لإضفاء الطابع الرسمي على مثل هذه التعيينات للأحرف. وهي سهلة الفهم إذا فهمنا المصطلحات بشكل صحيح.
الأحرف والبايتات والتعيين
أ شخصية هو حرف أو رقم أو أي رمز آخر قابل للعرض، مثل رموز الترقيم والعلامات الرياضية مثل علامة “=” وعلامة الجمع “+” ورموز العملة. الشيء الذي تراه على الشاشة والذي يمثل هذا الحرف يسمى حرفًا، وتشكل مجموعة الحروف حرفًا.
أ الخط هو ما يطلق عليه الكثير من الناس خطأً اسم الخط. بالمعنى الدقيق للكلمة، الخط هو نسخة من الخط تم تعديلها، على سبيل المثال عن طريق زيادة أو تقليل حجمه، أو تغيير وزنه لجعل خطوط الحروف أكثر سمكًا أو أنحف. وبغض النظر عن الخط، فإن التمثيل العددي للحرف يظل كما هو.
جميع الشخصيات في رسم خريطة واحدة تسمى مجموعة الأحرف. كل حرف في المجموعة له قيمة عددية ثابتة وفريدة تسمى نقطة رمزيةإذا لم يظهر حرف أو رمز في مجموعة الأحرف – أي أنه لا توجد نقطة رمزية له – فلا يمكن عرضه باستخدام مجموعة الأحرف تلك. هناك اعتبار مهم وهو عدد البايتات المستخدمة لتمثيل حرف واحد. فكلما زاد عدد البايتات التي تستخدمها لكل حرف، زاد عدد الأحرف التي يمكنك تضمينها في المجموعة.
الجد الأكبر لجميع مجموعات الأحرف ذات البايت الواحد هو معيار ASCIIيعود تاريخها إلى أواخر ستينيات القرن العشرين عندما تم وضع معيار مكون من 7 بتات لتشفير 128 نقطة ترميز مختلفة لاستخدامها بواسطة الطابعات عن بعد. وعلى النقيض من ذلك، معيار يونيكود يحتوي على إجمالي 1,114,112 نقطة رمز. هذه المساحة الرمزية الكبيرة مطلوبة لأن Unicode يحاول توفير دعم تعيين الأحرف لجميع اللغات البشرية.
إن استخدام عدد ثابت من البايتات لتخزين نقاط التعليمات البرمجية يعد إهدارًا للوقت. فإذا كانت نقطة التعليمات البرمجية تحتاج إلى بايت واحد فقط لتحديدها، فإن البايتات الأخرى المحجوزة لتلك النقطة البرمجية تصبح زائدة عن الحاجة. تستخدم مجموعات الأحرف متعددة البايتات ذات الطول المتغير في Unicode عددًا متغيرًا من البايتات لنقاط التعليمات البرمجية، مع الحاجة إلى ما يصل إلى أربعة بايتات لوصف نقطة تعليمات برمجية معقدة.
لذا، قد يتعين على نقطة الترميز تشفير نوعين من البيانات. إذ يتعين عليها تحديد الحرف الذي تمثله، ويجب أن تحتوي على بيانات وصفية عن نفسها، مثل عدد البايتات في نقطة الترميز. كما يتعين دمج بعض الأحرف مع أحرف أخرى للحصول على الحرف النهائي، لذا يتعين على نقطة الترميز تشفير هذه المعلومات أيضًا.
تتمثل ميزة نظام الطول المتغير في أنك تستخدم البايتات التي تحتاجها حقًا فقط. وهذا نظام فعال ويؤدي إلى ملفات أصغر حجمًا. أما العيب فهو أن البيانات أكثر تعقيدًا في القراءة والتحليل. وقد يصبح التحويل من مجموعة أحرف إلى أخرى صعبًا للغاية، وبسرعة كبيرة.
وهنا يأتي دور الأمر iconv.
كيفية استخدام الأمر iconv
إن ما يفتقر إليه الأمر iconv من حيث خيارات سطر الأوامر يعوضه أكثر من خلال عدد ترميزات الأحرف التي يدعمها. فهو يسرد أكثر من 1100 ترميز مختلف، ولكن العديد منها عبارة عن أسماء مستعارة لنفس الشيء. يمكننا سرد جميع الترميزات المدعومة باستخدام الخيار -l (قائمة).
iconv -l
لاستخدام iconv، تحتاج إلى تحديد ملف مصدر وملف إخراج، والترميز الذي تقوم بالتحويل منه والترميز الذي تقوم بالتحويل إليه. إذا لم تحدد أسماء الملفات، يستخدم iconv STDIN وSTDOUT، ويأخذ مدخلاته من سطر الأوامر ويكتب مخرجاته إلى نافذة المحطة الطرفية. يمكنك توجيه المدخلات إلى iconv، ويمكنك إعادة توجيه مخرجاته إلى ملف أيضًا.
سنستخدم iconv مع STDIN لتوضيح بعض النقاط. نحتاج إلى تحديد ترميز النص المدخل، لذا سنستخدم أمر locale لاكتشاف ماهيته.
locale
يقول السطر الأول أننا نستخدم اللغة الإنجليزية الأمريكية وترميز Unicode UTF-8. تحتوي سلسلة الاختبار لدينا على نص عادي وكلمة مميزة وحرف غير إنجليزي (الألمانية) إزيت الحرف (ß)، ورمز العملة لليورو.
plain àccented non-English ß Foreign currency €
سنقوم بتحويل هذا إلى ASCII. نستخدم echo لنقل نص الإدخال إلى iconv. نستخدم الخيار -f (من) لتحديد ترميز الإدخال UTF-8، والخيار -t (إلى) للإشارة إلى أننا نريد الإخراج بتنسيق US-ASCII.
echo plain àccented non-English ß Foreign currency € | iconv -f UTF-8 -t US-ASCII
تفشل هذه الطريقة عند العقبة الأولى. لا يوجد حرف مكافئ في نظام US-ASCII لـ “à”، لذا يتم التخلي عن التحويل. يستخدم iconv العد بدون إزاحة، لذا يُقال لنا إن المشكلة حدثت في الموضع السادس. إذا أضفنا خيار -c (استمرار)، فسوف يتجاهل iconv الأحرف غير القابلة للتحويل ويستمر في معالجة بقية المدخلات.
echo plain àccented non-English ß Foreign currency € | iconv -f UTF-8 -t US-ASCII
يتم تنفيذ الأمر حتى اكتماله الآن، ولكن هناك أحرف مفقودة من الناتج. يمكننا جعل iconv يوفر تقريبًا لحرف غير قابل للتحويل عن طريق استبدال حرف مشابه أو تمثيل آخر. إذا لم يتمكن من إدارة ذلك، فإنه يقوم بإدراج علامة استفهام “؟” حتى تتمكن بسهولة من رؤية الحرف الذي لم يتم تحويله.
وتسمى هذه العملية الترجمة الحرفية، ولاستدعائه، أضف السلسلة “//TRANSLIT” إلى الترميز المستهدف.
echo plain àccented non-English ß Foreign currency € | iconv -f UTF-8 -t US-ASCII//TRANSLIT
الآن أصبح لدينا نص إخراجي كامل، مع “a” بدلاً من “à”، و”ss” بدلاً من “ß”، و”EUR” بدلاً من رمز العملة “€”.
استخدام iconv مع الملفات
إن استخدام iconv مع الملفات يشبه إلى حد كبير استخدامه على سطر الأوامر. لمعرفة نوع ترميز الملف المصدر، يمكننا استخدام الأمر file.
file -i input.txt
ملف الإدخال الخاص بنا موجود في ترميز UTF-16LE الترميز. هذا هو 16 بت القليل من النهاية الترميز. يبدو الأمر كما يلي:
less input.txt
إذا حدقت قليلاً وقرأت الأحرف المكتوبة باللون الأبيض، يمكنك تحديد سلاسل النص الفعلية. ستعامل العديد من البرامج ملفًا كهذا بشكل غير صحيح كملف ثنائي، لذا سنحوله إلى UTF-8.
نحن نستخدم الخيار -f (من) لتحديد ترميز ملف الإدخال، والخيار -t (إلى) لإخبار iconv بأننا نريد الإخراج بتنسيق UTF-8. نحتاج إلى استخدام الخيار -o (إخراج) لتسمية ملف الإخراج. نحن لا نستخدم خيارًا لتسمية ملف الإدخال – نحن فقط نخبر iconv باسمه.
iconv -f UTF-16LE -t UTF-8//TRANSLIT input.txt -o output.txt
يبدو ملف الإخراج الخاص بنا بهذا الشكل:
less output.txt
القوة عندما تحتاجها
ربما لا تستخدم iconv بشكل متكرر، ولكن عندما تحتاج إليه، فإنه قد ينقذك من الكثير من المشاكل.
أتلقى الكثير من الملفات من الأشخاص الذين يستخدمون أجهزة كمبيوتر تعمل بنظام Windows أو Mac، وغالبًا من الخارج. تصل هذه الملفات بمختلف أنواع الترميزات. لقد باركت iconv أكثر من مرة للسماح لي بسهولة بالعمل مع هذه الملفات على Linux.