الإنجليزيةالفرنسيةالإسبانية

OnWorks فافيكون

perluniintro - عبر الإنترنت في السحابة

قم بتشغيل perluniintro في موفر الاستضافة المجاني OnWorks عبر Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

هذا هو الأمر perluniintro الذي يمكن تشغيله في موفر الاستضافة المجاني OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

برنامج:

اسم


perluniintro - مقدمة بيرل يونيكود

الوصف


يقدم هذا المستند فكرة عامة عن Unicode وكيفية استخدام Unicode في Perl. يرى
"مزيد من الموارد" للإشارات إلى معالجات أكثر تعمقًا لليونيكود.

يونيكود
Unicode هو معيار مجموعة الأحرف الذي يخطط لتدوين جميع أنظمة الكتابة الخاصة بـ
العالم، بالإضافة إلى العديد من الرموز الأخرى.

Unicode وISO/IEC 10646 عبارة عن معايير منسقة توحد جميع المعايير الحديثة الأخرى تقريبًا
معايير مجموعة الأحرف، التي تغطي أكثر من 80 نظام كتابة ومئات اللغات،
بما في ذلك جميع اللغات الحديثة ذات الأهمية التجارية. جميع الشخصيات في أكبر
يتم أيضًا ترميز القواميس الصينية واليابانية والكورية. سوف المعايير في نهاية المطاف
يغطي جميع الأحرف تقريبًا في أكثر من 250 نظام كتابة وآلاف اللغات.
تم إصدار Unicode 1.0 في أكتوبر 1991، و6.0 في أكتوبر 2010.

يونيكود حرف هو كيان مجردة. وهي غير مرتبطة بأي عدد صحيح معين
العرض، لا سيما لغة C "char". Unicode محايد للغة وعرض-
محايد: لا يشفر لغة النص، ولا يحدد بشكل عام
الخطوط أو تفاصيل التخطيط الرسومي الأخرى. يعمل Unicode على الأحرف وعلى النص المبني
من تلك الشخصيات.

يعرّف Unicode أحرفًا مثل "LATIN CAPITAL LETTER A" أو "GREEK SMALL LETTER ALPHA" و
أرقام فريدة للأحرف، في هذه الحالة 0x0041 و0x03B1، على التوالي. هؤلاء
يتم استدعاء أرقام فريدة الكود نقطة. نقطة الكود هي في الأساس موضع ملف
حرف ضمن مجموعة جميع أحرف Unicode الممكنة، وبالتالي في Perl، المصطلح
ترتيبي غالبا ما يستخدم بالتبادل معها.

يفضل معيار Unicode استخدام التدوين السداسي العشري لنقاط الكود. إذا أرقام
مثل 0x0041 غير مألوف لك ، يمكنك إلقاء نظرة خاطفة على قسم لاحق ، "التدوين السداسي العشري".
يستخدم معيار Unicode الترميز "U+0041 LATIN CAPITAL LETTER A" لإعطاء
نقطة الرمز الست عشري والاسم المعياري للحرف.

يحدد Unicode أيضًا العديد من HAS للأحرف، مثل "أحرف كبيرة" أو
"أحرف صغيرة" أو "رقم عشري" أو "علامات ترقيم"؛ هذه الخصائص مستقلة عن
أسماء الشخصيات. وعلاوة على ذلك، عمليات مختلفة على الشخصيات مثل
يتم تعريف الأحرف الكبيرة والأحرف الصغيرة والترتيب (الفرز).

يونيكود منطقي يمكن أن تتكون "الشخصية" في الواقع من أكثر من شخصية داخلية يقدم
"الحرف" أو نقطة التعليمات البرمجية. بالنسبة للغات الغربية، تم تصميم هذا بشكل مناسب بواسطة أ قاعدة
حرف (مثل "LATIN CAPITAL LETTER A") متبوعًا بواحد أو أكثر الصفات التعريفية (مثل
"الجمع بين اللكنة الحادة"). يسمى هذا التسلسل من الحرف الأساسي والمعدلات أ
الجمع بين حرف تسلسل. تتطلب بعض اللغات غير الغربية نماذج أكثر تعقيدًا،
لذلك أنشأ Unicode ملف جرافيم كتلة المفهوم، والذي تم تحسينه لاحقًا في
مدد جرافيم كتلة. على سبيل المثال، يعتبر مقطع الهانغول الكوري مقطعًا منفردًا
حرف منطقي، ولكنه يتكون غالبًا من ثلاثة أحرف Unicode فعلية: بادئة
متبوعًا بحرف متحرك داخلي متبوعًا بحرف ساكن لاحق.

يعتمد ما إذا كنت ستسمي مجموعات الحروف الموسعة هذه "أحرفًا" على وجهة نظرك
منظر. إذا كنت مبرمجًا، فمن المحتمل أنك تميل إلى رؤية كل عنصر في ملف
تسلسلات كوحدة واحدة، أو "حرف". ولكن من وجهة نظر المستخدم، كله
يمكن رؤية التسلسل على أنه "شخصية" واحدة نظرًا لأن هذا هو على الأرجح ما يبدو عليه في
سياق لغة المستخدم. في هذه الوثيقة نأخذ وجهة نظر المبرمج:
"حرف" واحد هو نقطة رمز Unicode واحدة.

بالنسبة لبعض مجموعات الأحرف الأساسية والمعدلات، هناك مهيأة مسبقا حرفا.
يوجد حرف واحد مكافئ، على سبيل المثال، للتسلسل "LATIN CAPITAL
"الحرف A" متبوعًا بـ "الجمع بين اللكنة الحادة". ويسمى "الحرف اللاتيني الكبير A"
مع حاد". ومع ذلك، فإن هذه الأحرف المركبة مسبقًا متاحة للبعض فقط
مجموعات، وتهدف بشكل أساسي إلى دعم التحويلات ذهابًا وإيابًا بين Unicode و
المعايير القديمة (مثل ISO 8859). استخدام التسلسلات، كما يفعل Unicode، يسمح بالحاجة
عدد أقل من وحدات البناء الأساسية (نقاط الكود) للتعبير عن العديد من الرسوم البيانية المحتملة
عناقيد المجموعات. لدعم التحويل بين الأشكال المتكافئة، المختلفة التطبيع أشكال .
محددة أيضا. وهكذا، "الحرف اللاتيني الكبير A مع الحاد" موجود تطبيع شكل
تتألف، (مختصر NFC)، والتسلسل "LATIN CAPITAL LETTER A" متبوعًا بـ
"الجمع بين اللكنة الحادة" يمثل نفس الحرف في تطبيع شكل متحللة
(نفد).

ونظرًا للتوافق مع الإصدارات السابقة مع الترميزات القديمة، فإن "رقم فريد لكل
تنهار فكرة "الشخصية" قليلاً: بدلاً من ذلك، يوجد "رقم واحد على الأقل لكل منها
"الشخصية". يمكن تمثيل نفس الشخصية بشكل مختلف في العديد من التراث
الترميزات. والعكس غير صحيح: بعض نقاط التعليمات البرمجية لا تحتوي على حرف معين.
أولاً، هناك نقاط تعليمات برمجية غير مخصصة ضمن الكتل المستخدمة بطريقة أخرى. ثانيا هناك
هي أحرف تحكم Unicode خاصة لا تمثل أحرفًا حقيقية.

عندما تم تصميم Unicode لأول مرة، كان يُعتقد أن جميع شخصيات العالم يمكن أن تكون كذلك
ممثلة باستخدام كلمة 16 بت؛ وهذا بحد أقصى 0x10000 (أو 65,536) حرفًا
تكون هناك حاجة، من 0x0000 إلى 0xFFFF. وسرعان ما ثبت أن هذا خطأ، ومنذ Unicode 2.0
(يوليو 1996)، تم تعريف Unicode على طول الطريق حتى 21 بت (0x10FFFF)، وUnicode
3.1 (مارس 2001) حدد الأحرف الأولى فوق 0xFFFF. أول 0x10000 حرفًا
تسمى طائرة 0، أو Basic متعدد اللغات طائرة (بي إم بي). مع Unicode 3.1، 17 (نعم،
تم تعريف سبعة عشر) طائرة في المجمل - لكنها ليست قريبة من التعريف الكامل
الشخصيات، حتى الآن.

عندما يتم ترميز لغة جديدة، سيختار Unicode بشكل عام "كتلة" من
نقاط رمز متتالية غير مخصصة لأحرفها. حتى الآن، عدد نقاط التعليمات البرمجية
في هذه الكتل كانت دائمًا قابلة للقسمة بالتساوي على 16. الإضافات في الكتلة، ليست حاليًا
اللازمة، وتركت غير مخصصة، للنمو في المستقبل. ولكن كانت هناك مناسبات عندما أ
احتاج الإصدار اللاحق إلى نقاط تعليمات برمجية أكثر من الإضافات المتوفرة، وكان على الكتلة الجديدة أن تفعل ذلك
مخصصة في مكان آخر، غير مجاور للمكان الأولي، للتعامل مع الفائض.
وهكذا، أصبح واضحًا في وقت مبكر أن "الكتلة" لم تكن مبدأ تنظيميًا مناسبًا،
وهكذا تم إنشاء خاصية "البرنامج النصي". (في وقت لاحق تمت إضافة خاصية البرنامج النصي المحسنة كـ
حسنًا، خاصية "Script_Extensions".) نقاط التعليمات البرمجية تلك الموجودة في الكتل الفائضة
لا يزال من الممكن أن يحتوي على نفس النص الأصلي. مفهوم البرنامج النصي يناسب بشكل أوثق
مع اللغة الطبيعية: هناك نص "لاتيني"، وخط "يوناني"، وما إلى ذلك؛ و ها هم
عدة نصوص مصطنعة، مثل "شائع" للأحرف المستخدمة في عدة نصوص
البرامج النصية، مثل الرموز الرياضية. عادةً ما تمتد البرامج النصية إلى أجزاء متنوعة من عدة أجزاء
كتل. لمزيد من المعلومات حول البرامج النصية، راجع "البرامج النصية" في perlunicode. تقسيم
في الكتل موجود، لكنه يكاد يكون عرضيًا تمامًا - وهو قطعة أثرية لكيفية عمل
تم تخصيص الشخصيات ولا تزال. (لاحظ أن هذه الفقرة تحتوي على
المبالغة في تبسيط الأمور من أجل أن تكون هذه مقدمة. يونيكود لا حقا
تشفير اللغات، ولكن أنظمة الكتابة الخاصة بها - نصوصها؛ ويمكن أن يكون نص واحد
تستخدمها العديد من اللغات. يقوم Unicode أيضًا بتشفير أشياء لا تتعلق باللغات حقًا،
مثل رموز مثل "BAGGAGE CLAIM".)

نقاط كود Unicode هي مجرد أرقام مجردة. لإدخال وإخراج هذه الملخصات
الأرقام، يجب أن تكون الأرقام المشفرة or متسلسلة بطريقة ما. يحدد Unicode عدة
حرف ترميز أشكال، منها UTF-8 هو الأكثر شعبية. UTF-8 ذو طول متغير
الترميز الذي يشفر أحرف Unicode من 1 إلى 4 بايت. وتشمل الترميزات الأخرى UTF-16
وUTF-32 ومتغيراتها الكبيرة والصغيرة (UTF-8 مستقل عن ترتيب البايت).
تحدد المواصفة القياسية ISO/IEC 10646 نماذج التشفير UCS-2 وUCS-4.

لمزيد من المعلومات حول الترميزات، على سبيل المثال، لمعرفة ماذا بدائل بايت
طلب علامات (BOMs) هي -- راجع perlunicode.

بيرلس يونيكود الدعم الفني
بدءًا من الإصدار 5.6.0 من Perl، أصبح لدى Perl القدرة على التعامل مع Unicode محليًا. بيرل
ومع ذلك، فإن الإصدار 5.8.0 هو الإصدار الأول الموصى به للعمل الجاد في Unicode. ال
أصلح إصدار الصيانة 5.6.1 العديد من مشكلات Unicode الأولية
التنفيذ، ولكن على سبيل المثال لا تزال التعبيرات العادية لا تعمل مع Unicode في
5.6.1. Perl v5.14.0 هو الإصدار الأول حيث يكون دعم Unicode (تقريبًا) بسلاسة
قابل للتكامل دون بعض الأخطاء (الاستثناء هو بعض الاختلافات في الاقتباس، و
تم إصلاحه بدءًا من Perl 5.16.0). لتمكين هذا الدعم السلس، يجب عليك "استخدام
ميزة 'unicode_strings'" (والتي يتم تحديدها تلقائيًا إذا كنت "تستخدم الإصدار 5.012" أو أعلى).
انظر الميزة. (5.14 يعمل أيضًا على إصلاح عدد من الأخطاء والخروج عن معيار Unicode.)

قبل إصدار Perl v5.8.0، تم استخدام "use utf8" للإعلان عن أن العمليات في
سيكون الملف أو الكتلة الحالية مدركة لـ Unicode. تم العثور على هذا النموذج ليكون خاطئا، أو في
الأقل خرقًا: يتم الآن حمل "Unicodeness" مع البيانات، بدلاً من الارتباط بها
العمليات. بدءًا من الإصدار Perl v5.8.0، تبقى حالة واحدة فقط حيث يتم استخدام "use
"utf8" مطلوب: إذا كان برنامج Perl النصي نفسه مشفرًا بـ UTF-8، فيمكنك استخدام UTF-8 في
أسماء المعرفات، وفي السلسلة والتعبيرات الحرفية العادية، بقول "استخدام utf8".
هذا ليس هو الإعداد الافتراضي لأن البرامج النصية التي تحتوي على بيانات 8 بت قديمة قد تنكسر. يرى
utf8.

بيرلس يونيكود الموديل
يدعم Perl كلا من سلاسل ما قبل 5.6 من البايتات الأصلية ذات ثمانية بتات، وسلاسل Unicode
الشخصيات. المبدأ العام هو أن Perl يحاول الاحتفاظ ببياناته على شكل بايتات ذات ثمانية بتات
لأطول فترة ممكنة، ولكن بمجرد عدم إمكانية تجنب Unicodeness، يتم حفظ البيانات
تمت ترقيته بشفافية إلى Unicode. قبل إصدار Perl v5.14.0، لم تكن الترقية كاملة
شفاف (راجع "خطأ Unicode"" في perlunicode)، وللتوافق مع الإصدارات السابقة،
لا يتم الحصول على الشفافية الكاملة ما لم يتم "استخدام الميزة 'unicode_strings'" (انظر الميزة) أو
تم تحديد "استخدام 5.012" (أو أعلى).

داخليًا، يستخدم Perl حاليًا مجموعة الأحرف الأصلية المكونة من ثمانية بتات لملف
النظام الأساسي (على سبيل المثال Latin-1) هو UTF-8 الافتراضي لتشفير سلاسل Unicode.
على وجه التحديد، إذا كانت كافة نقاط التعليمات البرمجية في السلسلة هي 0xFF أو أقل، يستخدم Perl الأصلي
مجموعة أحرف ثمانية بت. وإلا فإنه يستخدم UTF-8.

لا يحتاج مستخدم لغة Perl عادةً إلى معرفة أو الاهتمام بكيفية قيام لغة Perl بترميزها
سلاسل داخلية، ولكنها تصبح ذات صلة عند إخراج سلاسل Unicode إلى الدفق
بدون طبقة PerlIO (طبقة ذات التشفير "الافتراضي"). في مثل هذه الحالة، البايتات الخام
المستخدمة داخليًا (مجموعة الأحرف الأصلية أو UTF-8، بما يتناسب مع كل سلسلة).
سيتم استخدامها، وسيتم إصدار تحذير "أحرف واسعة" إذا كانت تلك السلاسل تحتوي على ملحق
حرف يتجاوز 0x00FF.

على سبيل المثال،

بيرل -e 'طباعة "\x{DF}\n"، "\x{0100}\x{DF}\n"'

يُنتج مزيجًا عديم الفائدة إلى حدٍ ما من البايتات الأصلية وUTF-8، بالإضافة إلى تحذير:

طابع واسع في الطباعة ...

لإخراج UTF-8، استخدم طبقة الإخراج ":encoding" أو ":utf8". في انتظار

binmode(STDOUT, ":utf8");

إلى هذا البرنامج النموذجي يضمن أن الإخراج هو UTF-8 بالكامل، ويزيل ملف
تحذير البرنامج.

يمكنك تمكين التحديد التلقائي لـ UTF-8 لمقابض الملفات القياسية، الافتراضي "open()"
طبقة وARGV باستخدام إما مفتاح سطر الأوامر "-C" أو "PERL_UNICODE"
متغير البيئة، راجع perlrun للحصول على وثائق رمز التبديل "-C".

لاحظ أن هذا يعني أن Perl تتوقع أن تعمل البرامج الأخرى بنفس الطريقة: إذا كان Perl يعمل
تم دفعنا إلى الاعتقاد بأن STDIN يجب أن يكون UTF-8، ولكن بعد ذلك يأتي STDIN من آخر
الأمر ليس UTF-8، فمن المحتمل أن يشتكي Perl من UTF-8 المشوه.

تتطلب جميع الميزات التي تجمع بين Unicode وI/O أيضًا استخدام ميزة PerlIO الجديدة.
تستخدم جميع منصات Perl 5.8 تقريبًا PerlIO، على الرغم من ذلك: يمكنك معرفة ما إذا كان نظامك قد انتهى أم لا
تشغيل "Perl -V" والبحث عن "useperlio=define".

يونيكود EBCDIC
أضاف Perl 5.8.0 دعمًا لـ Unicode على منصات EBCDIC. وقد سمح لهذا الدعم
انقضت في الإصدارات اللاحقة، ولكن تم إحياؤها في 5.22. دعم Unicode أكثر إلى حد ما
معقدة للتنفيذ حيث أن هناك حاجة إلى تحويلات إضافية. انظر perlebcdic للمزيد
معلومات.

على منصات EBCDIC، نموذج ترميز Unicode الداخلي هو UTF-EBCDIC بدلاً من UTF-8.
الفرق هو أن UTF-8 هو "آمن لـ ASCII" حيث يتم تشفير أحرف ASCII إلى UTF-8
كما هو، في حين أن UTF-EBCDIC "آمن لـ EBCDIC"، حيث أن جميع الأحرف الأساسية (والتي تتضمن
كل تلك التي لها معادلات ASCII (مثل "A"، "0"، "%"، وما إلى ذلك.) هي نفسها في كليهما
EBCDIC وUTF-EBCDIC. غالبًا ما تستخدم الوثائق المصطلح "UTF-8" للإشارة إلى UTF-EBCDIC
أيضًا. هذا هو الحال في هذه الوثيقة.

خلق يونيكود
ينطبق هذا القسم بالكامل على لغة Perls بدءًا من الإصدار v5.22. تحذيرات مختلفة في وقت سابق
الإصدارات موجودة في القسم الفرعي "تحذيرات الإصدارات السابقة" أدناه.

لإنشاء أحرف Unicode بأحرف حرفية، استخدم علامة "\N{...}" بين علامات الاقتباس المزدوجة
سلاسل:

$smiley_from_name = "\N{WHITE SMILING FACE}";
$smiley_from_code_point = "\N{U+263a}";

وبالمثل، يمكن استخدامها في التعبيرات الحرفية العادية

$smiley =~ /\N{الوجه المبتسم الأبيض}/;
$smiley =~ /\N{U+263a}/;

في وقت التشغيل يمكنك استخدام:

استخدم الأسماء المحفورة () ؛
حسابي $hebrew_alef_from_name
= charnames::string_vianame("الحرف العبري ألف");
$hebrew_alef_from_code_point = charnames::string_vianame("U+05D0");

وبطبيعة الحال، فإن "ord()" ستفعل العكس: فهي تحول الحرف إلى نقطة رمز.

هناك خيارات وقت التشغيل الأخرى كذلك. يمكنك استخدام "حزمة ():"

my $ hebrew_alef_from_code_point = pack ("U"، 0x05d0) ؛

أو يمكنك استخدام "chr()"، على الرغم من أنها أقل ملاءمة في الحالة العامة:

$hebrew_alef_from_code_point = chr(utf8::unicode_to_native(0x05d0));
utf8::upgrade($hebrew_alef_from_code_point);

ليست هناك حاجة إلى "utf8::unicode_to_native()" و"utf8::upgrade()" إذا كانت الوسيطة
أعلى من 0xFF، لذلك كان من الممكن كتابة ما ورد أعلاه كـ

$hebrew_alef_from_code_point = مركز حقوق الإنسان(0x05d0);

نظرًا لأن 0x5d0 أعلى من 255.

يمكن أيضًا استخدام "\x{}" و"\o{}" لتحديد نقاط التعليمات البرمجية في وقت الترجمة في مزدوج
quotish strings ، ولكن للتوافق مع الإصدارات السابقة مع Perls الأقدم ، تنطبق نفس القواعد مثل
مع "chr()" لنقاط الكود الأقل من 256.

يتم استخدام "utf8::unicode_to_native()" بحيث يكون رمز Perl قابلاً للنقل إلى منصات EBCDIC.
يمكنك حذفها إذا كنت في الحقيقة بالتأكيد لن يرغب أحد أبدًا في استخدام الكود الخاص بك على غير
منصة أسكي. بدءًا من الإصدار 5.22 من Perl، تم تحسين الاستدعاءات إليه على منصات ASCII،
لذلك ليس هناك عقوبة أداء على الإطلاق في إضافتها. أو يمكنك ببساطة استخدام الآخر
البنيات التي لا تتطلب ذلك.

راجع "مزيد من الموارد" لمعرفة كيفية العثور على كل هذه الأسماء والرموز الرقمية.

في وقت سابق الإصدارات المحاذير

على منصات EBCDIC، قبل الإصدار 5.22، لا يعمل استخدام "\N{U+...}" بشكل صحيح.

قبل الإصدار 5.16، كان استخدام "\N{...}" مع اسم الحرف (بدلاً من نقطة الرمز "U+...")
يتطلب "استخدام الأحرف: كامل".

قبل الإصدار 5.14، كانت هناك بعض الأخطاء في "\N{...}" باسم الحرف (بدلاً من الاسم
"U+..." نقطة الرمز).

تم تقديم "charnames::string_vianame()" في الإصدار 5.14. قبل ذلك،
يجب أن يعمل "charnames::vianame()" ولكن فقط إذا كانت الوسيطة بالصيغة "U+...". لك
أفضل رهان هناك لوقت التشغيل Unicode حسب اسم الحرف هو على الأرجح:

استخدم الأسماء المحفورة () ؛
حسابي $hebrew_alef_from_name
= pack("U"، charnames::vianame("الحرف العبري أليف"));

معالجة يونيكود
التعامل مع Unicode شفاف في معظمه: فقط استخدم السلاسل كالمعتاد.
ستعمل وظائف مثل "index()" و"length()" و"substr()" على أحرف Unicode؛
ستعمل التعبيرات العادية على أحرف Unicode (انظر perlunicode وperlretut).

لاحظ أن بيرل يعتبر مجموعات الحروف بمثابة أحرف منفصلة، ​​على سبيل المثال

طول الطباعة ("\N{LATIN CAPITAL LETTER A}\N{COMBINING ACUTE ACCENT}")،
"\ن"؛

ستطبع 2، وليس 1. الاستثناء الوحيد هو أن التعبيرات العادية تحتوي على "\X" لـ
مطابقة مجموعة حروف ممتدة. (وبالتالي فإن "\X" في التعبير العادي سوف يتطابق مع
التسلسل الكامل لكلا المثالين.)

ومع ذلك، فإن الحياة ليست شفافة تمامًا عند العمل مع الترميزات القديمة، وI/O، و
بعض الحالات الخاصة:

إرث ترميزات
عند دمج البيانات القديمة وUnicode، يجب ترقية البيانات القديمة إلى Unicode.
يُفترض عادةً أن تكون البيانات القديمة هي ISO 8859-1 (أو EBCDIC، إن أمكن).

تعرف وحدة "Encode" العديد من الترميزات ولديها واجهات لإجراء التحويلات
بين تلك الترميزات:

استخدم التشفير "فك التشفير"؛
$data = decode("iso-8859-3", $data); # تحويل من القديم إلى utf-8

يونيكود I / O
عادة، كتابة بيانات Unicode

طباعة FH $some_string_with_unicode، "\n"؛

ينتج بايتات أولية يستخدمها Perl لتشفير سلسلة Unicode داخليًا.
يعتمد التشفير الداخلي لـ Perl على النظام بالإضافة إلى الأحرف الموجودة فيه
السلسلة في ذلك الوقت. إذا كان أي من الأحرف عند نقاط الرمز 0x100 أو أعلى، فأنت
سوف تحصل على تحذير. للتأكد من أن الإخراج يتم عرضه بشكل صريح في الترميز
الرغبة - ولتجنب التحذير - افتح الدفق بالتشفير المطلوب. بعض
أمثلة:

افتح FH، ">:utf8"، "ملف"؛

افتح FH، ">:encoding(ucs2)"، "ملف"؛
افتح FH، ">:encoding(UTF-8)"، "ملف"؛
افتح FH، ">:encoding(shift_jis)"، "ملف"؛

وفي التدفقات المفتوحة بالفعل، استخدم "binmode()":

binmode(STDOUT, ":utf8");

binmode(STDOUT, ":encoding(ucs2)");
binmode(STDOUT, ":encoding(UTF-8)");
binmode(STDOUT, ":encoding(shift_jis)");

مطابقة أسماء الترميز فضفاضة: حالة الأحرف لا تهم، والعديد من الترميزات لها أهمية
عدة أسماء مستعارة. لاحظ أن الطبقة ":utf8" يجب دائمًا تحديدها تمامًا بهذه الطريقة؛
أنه ليس تخضع للمطابقة فضفاضة لأسماء الترميز. لاحظ أيضًا أنه حاليًا
":utf8" غير آمن للإدخال، لأنه يقبل البيانات دون التحقق من صحتها
UTF-8 صالح بالفعل؛ يجب عليك بدلاً من ذلك استخدام ":encoding(utf-8)" (مع أو بدون واصلة).

راجع PerlIO لطبقة ":utf8"، وPerlIO::encoding وEncode::PerlIO لـ
طبقة ":encoding()"، وEncode::مدعمة للعديد من الترميزات التي يدعمها "Encode"
وحدة.

القراءة في ملف تعرفه يتم ترميزه في أحد Unicode أو التراث
لا تعمل الترميزات على تحويل البيانات بطريقة سحرية إلى Unicode في نظر بيرل. للقيام بذلك،
تحديد الطبقة المناسبة عند فتح الملفات

open(my $fh,'<:encoding(utf8)', 'anything');
$line_of_unicode = <$fh>;

open(my $fh,'<:encoding(Big5)', 'anything');
$line_of_unicode = <$fh>;

يمكن أيضًا تحديد طبقات الإدخال/الإخراج بشكل أكثر مرونة باستخدام البراغما "المفتوحة". انظر مفتوحة، أو
ننظر إلى المثال التالي.

استخدم الفتح ':encoding(utf8)'; # سيكون الترميز الافتراضي للإدخال/الإخراج
# يو تي إف-8
افتح X، ">ملف"؛
طباعة X مركز حقوق الإنسان(0x100)، "\n"؛
إغلاق X؛
افتح ي"
طباعة "%#x\n"، أورد( ); # يجب أن يطبع هذا 0x100
إغلاق ص؛

مع البراغما "المفتوحة"، يمكنك استخدام طبقة ":locale".

البدء { $ENV{LC_ALL} = $ENV{LANG} = 'ru_RU.KOI8-R' }
# سوف يقوم :locale باستكشاف متغيرات البيئة المحلية مثل
#LC_ALL
استخدم open OUT => ':locale'; # روسكي باروسكي
open(O, ">koi8");
اطبع يا مركز حقوق الإنسان(0x430); # حرف Unicode السيريلي الصغير A = KOI8-R 0xc1
إغلاق يا؛
فتح (أنا، "
printf "%#x\n"، ord( ), "\n"; # يجب أن يطبع هذا 0xc1
أغلق أنا؛

تقوم هذه الطرق بتثبيت عامل تصفية شفاف على دفق الإدخال/الإخراج الذي يحول البيانات من ملف
الترميز المحدد عند قراءته من الدفق. والنتيجة هي دائما Unicode.

تؤثر البراغما المفتوحة على جميع استدعاءات "open()" بعد البراغما عن طريق تعيين الطبقات الافتراضية.
إذا كنت تريد التأثير على تدفقات معينة فقط، استخدم طبقات صريحة مباشرة في "open()"
مكالمة.

يمكنك تبديل الترميزات على دفق مفتوح بالفعل باستخدام "binmode()"؛ انظر "بينمود"
في بيرفونك.

لا يعمل ":locale" حاليًا مع "open()" و"binmode()"، فقط مع "open"
براغما. تعمل الطرق ":utf8" و":encoding(...)" مع جميع "open()"،
"binmode ()"، والبراغما "المفتوحة".

وبالمثل، يمكنك استخدام طبقات الإدخال/الإخراج هذه في تدفقات الإخراج لتحويل Unicode تلقائيًا
إلى الترميز المحدد عند كتابته إلى الدفق. على سبيل المثال، ما يلي
يقوم المقتطف بنسخ محتويات الملف "text.jis" (المشفر كـ ISO-2022-JP، المعروف أيضًا باسم JIS) إلى
الملف "text.utf8"، المشفر بـ UTF-8:

open(my $nihongo, '<:encoding(iso-2022-jp)', 'text.jis');
open(my $unicode, '>:utf8', 'text.utf8');
بينما (<$nihongo>) { اطبع $unicode $_ }

إن تسمية الترميزات، سواء من خلال "open()" أو من خلال pragma "المفتوحة"، تسمح بالمرونة
الأسماء: "koi8-r" و"KOI8R" سيتم فهمهما.

الترميزات الشائعة المعترف بها بواسطة ISO وMIME وIANA ومختلف المعايير الأخرى
يتم التعرف على المنظمات؛ للحصول على قائمة أكثر تفصيلاً، راجع Encode::Supported.

"read()" يقرأ الأحرف ويعيد عدد الأحرف. "البحث ()" و"إخبار ()"
تعمل على عدد البايتات، كما هو الحال مع "sysread()" و"sysseek()".

لاحظ أنه بسبب السلوك الافتراضي المتمثل في عدم إجراء أي تحويل عند الإدخال إذا
لا توجد طبقة افتراضية، فمن السهل أن تكتب عن طريق الخطأ تعليمات برمجية تستمر في التوسع
الملف عن طريق ترميز البيانات بشكل متكرر:

# تحذير من الكود السيء
فتح F، "ملف"؛
محلي $/; ## قراءة الملف بأكمله بأحرف 8 بت
$ر = ؛
إغلاق ف؛
افتح F، ">:encoding(utf8)"، "ملف"؛
طباعة F $t؛ ## التحويل إلى UTF-8 عند الإخراج
إغلاق ف؛

إذا قمت بتشغيل هذا الرمز مرتين، فإن محتويات الملف ملف سيتم ترميزه مرتين بترميز UTF-8. "استعمال
open ':encoding(utf8)'" كان من شأنه تجنب الخطأ، أو فتح ملف ملف
للإدخال كـ UTF-8.

نوت: تعمل ميزات ":utf8" و":encoding" فقط إذا تم إنشاء لغة Perl الخاصة بك باستخدامها
PerlIO، وهو الإعداد الافتراضي في معظم الأنظمة.

عرض يونيكود As نص
في بعض الأحيان قد ترغب في عرض كميات بيرل القياسية التي تحتوي على Unicode كـ ASCII بسيط (أو
EBCDIC) النص. يقوم الروتين الفرعي التالي بتحويل الوسيطة الخاصة به بحيث يتم تحويل أحرف Unicode
مع نقاط رمز أكبر من 255 يتم عرضها كـ "\x{...}"، وأحرف التحكم (مثل
يتم عرض "\n") كـ "\x.."، وبقية الأحرف كما هي:

سلسلة فرعية لطيفة {
ينضم(""،
الخريطة {$_> 255 # إذا كان الحرف واسعًا ...
؟ sprintf("\\x{%04X}", $_) # \x{...}
: chr($_) =~ /[[:cntrl:]]/ # else if حرف التحكم...
؟ sprintf("\\x%02X", $_) # \x..
: quotemeta(chr($_)) # آخر مقتبس أو كما هو
} unpack("W*", $_[0])); # فك رموز Unicode
}

على سبيل المثال،

Nice_string("foo\x{100}bar\n")

ترجع السلسلة

"فو\x{0100}شريط\x0A"

والتي هي جاهزة للطباعة.

يتم استخدام ("\\x{}" هنا بدلاً من "\\N{}"، لأنه من المرجح أنك تريد رؤية ما
القيم الأصلية هي.)

ملصقات خاصة الحالات
· عامل تكملة البت ~ و فيك ()

قد ينتج عن عامل تكملة البت "~" نتائج مذهلة إذا تم استخدامه على السلاسل
تحتوي على أحرف ذات قيم ترتيبية أعلى من 255. في مثل هذه الحالة، تكون النتائج
يتوافق مع الترميز الداخلي للشخصيات، ولكن ليس مع أي شيء آخر. لذا
لا تفعل ذلك. وبالمثل بالنسبة لـ "vec()": ستعمل على الملف المشفر داخليًا
أنماط البت من أحرف Unicode، وليس على قيم نقطة التعليمات البرمجية، وهو أمر بالغ الأهمية
ربما ليس ما انت تريد.

· إلقاء نظرة خاطفة على التشفير الداخلي لبيرل

يجب ألا يهتم مستخدمو Perl العاديون أبدًا بكيفية تشفير Perl لأي سلسلة Unicode معينة
(لأن الطرق العادية للحصول على محتويات سلسلة باستخدام Unicode - عبر الإدخال
والإخراج - يجب أن يكون دائمًا عبر طبقات الإدخال/الإخراج المحددة بشكل صريح). ولكن إذا كان لا بد من ذلك،
هناك طريقتان للنظر وراء الكواليس.

إحدى الطرق لإلقاء نظرة خاطفة على التشفير الداخلي لأحرف Unicode هي استخدام
"unpack("C*,..." للحصول على البايتات مهما كان ترميز السلسلة، أو
"unpack("U0..", ...)" للحصول على بايتات ترميز UTF-8:

# هذا يطبع c4 80 لـ UTF-8 بايت 0xc4 0x80
طباعة الانضمام(" ", unpack("U0(H2)*", pack("U", 0x100))), "\n";

هناك طريقة أخرى تتمثل في استخدام الوحدة Devel::Peek :

perl -MDevel :: نظرة خاطفة -e 'تفريغ (مركز حقوق الإنسان(0x100))'

يُظهر ذلك علامة "UTF8" في FLAGS وكلاً من بايتات UTF-8 وأحرف Unicode فيها
"الكهروضوئية". راجع أيضًا لاحقًا في هذا المستند المناقشة حول "utf8::is_utf8()"
وظيفة.

متقدم المواضيع
· سلسلة التكافؤ

تصبح مسألة تكافؤ السلسلة معقدة إلى حد ما في Unicode: ماذا تفعل؟
يعني ب "على قدم المساواة"؟

(هل "الحرف اللاتيني الكبير A مع الحاد" يساوي "الحرف اللاتيني الكبير A"؟)

الإجابة المختصرة هي أن لغة Perl تقوم افتراضيًا بمقارنة التكافؤ ("eq"، "ne") على أساس فقط
على نقاط الكود من الشخصيات. في الحالة المذكورة أعلاه، الجواب هو لا (لأن 0x00C1
! = 0x0041). لكن في بعض الأحيان، يجب اعتبار أي حرف A متساويًا، أو حتى
أ في أي حال.

الإجابة الطويلة هي أنك بحاجة إلى التفكير في تطبيع الشخصية والغلاف
المشكلات: راجع Unicode::Normalize، تقرير Unicode الفني رقم 15، تسوية Unicode
نماذجhttp://www.unicode.org/unicode/reports/tr15> وأقسام حول تعيين الحالة في
معيار يونيكودhttp://www.unicode.org>.

اعتبارًا من Perl 5.8.0، أصبح طي الحالة "الكامل" لـ الإطار تعيينات/SpecialCasing is
تم تنفيذه، ولكن تبقى الأخطاء في "qr//i" معهم، وتم إصلاح معظمها بواسطة 5.14، و
بشكل أساسي بالكامل بحلول 5.18.

· سلسلة الترتيب

يحب الناس رؤية سلاسلهم مرتبة بشكل جيد - أو مرتبة حسب لغة Unicode.
ولكن مرة أخرى، ماذا تقصد بالجمع؟

(هل يأتي "الحرف اللاتيني الكبير A مع الحاد" قبل أو بعد "الحرف اللاتيني الكبير A"
مع القبر"؟)

الإجابة المختصرة هي أن لغة Perl تقوم افتراضيًا بمقارنة السلاسل ("lt"، "le"، "cmp"، "ge"،
"gt") بناءً على نقاط الكود الخاصة بالأحرف فقط. في الحالة المذكورة أعلاه الجواب
هو "بعد"، منذ 0x00C1 > 0x00C0.

الجواب الطويل هو أن "الأمر يعتمد"، ولا يمكن إعطاء إجابة جيدة بدونها
معرفة (على الأقل) سياق اللغة. راجع Unicode::Collate و يونيكود
الترتيب خوارزمية <http://www.unicode.org/unicode/reports/tr10/>

منوع
· نطاقات الأحرف والطبقات

نطاقات الأحرف في فئات الأحرف ذات التعبير العادي (على سبيل المثال، "/[az]/")
وفي عامل التشغيل "tr///" (المعروف أيضًا باسم "y///") لا يدركون Unicode بطريقة سحرية.
ما يعنيه هذا هو أن "[A-Za-z]" لن يبدأ بطريقة سحرية ليعني "كل الحروف الأبجدية
الحروف" (لا يعني ذلك أنه حتى بالنسبة للأحرف ذات 8 بتات؛ بالنسبة لأولئك، إذا كنت كذلك
باستخدام اللغات (perllocale)، استخدم "/[[:alpha:]]/"; وإذا لم يكن الأمر كذلك، استخدم 8 بت-علم
الخاصية "\p{alpha}").

جميع الخصائص التي تبدأ بـ "\p" (ومعكوسها "\P") هي في الواقع أحرف
الفئات التي تدرك Unicode. هناك العشرات منها، انظر perluniprops.

بدءًا من الإصدار 5.22، يمكنك استخدام نقاط كود Unicode كنقاط نهاية عادية
نطاقات أحرف نمط التعبير، وسيتضمن النطاق جميع رموز Unicode
النقاط التي تقع بين نقاط النهاية تلك، ضمناً.

qr/ [\N{U+03]-\N{U+20}] /x

يتضمن نقاط الكود "\N{U+03}"، "\N{U+04}"، ...، "\N{U+20}".

(من المخطط توسيع هذا السلوك ليشمل النطاقات في "tr///" في الإصدار 5.24 من Perl.)

· سلسلة إلى عدد التحويلات

يقوم Unicode بتعريف العديد من الأحرف العشرية والرقمية الأخرى إلى جانب
الأرقام المألوفة من 0 إلى 9، مثل الأرقام العربية والهندية. بيرل لا يدعم السلسلة
التحويل إلى رقم للأرقام غير ASCII من 0 إلى 9 (و ASCII "a" إلى "f" لـ
السداسي عشري). للحصول على تحويلات آمنة من أي سلسلة Unicode، استخدم "الأسطوانات ()"في
يونيكود :: UCD.

الأسئلة المتكررة بدافع الأجوبة
· هل ستكسر نصوصي القديمة؟

ربما لا. إلا إذا كنت تقوم بإنشاء أحرف Unicode بطريقة ما، قديمة
ينبغي الحفاظ على السلوك. حول السلوك الوحيد الذي تغير والذي
يمكن أن يبدأ إنشاء Unicode وهو السلوك القديم لـ "chr()" حيث يتم توفير ملف
أنتجت الوسيطة التي تزيد عن 255 حرفًا modulo 255."مركز حقوق الإنسان(300)" مثلا
يساوي "مركز حقوق الإنسان(45)" أو "-" (في ASCII)، أصبح الآن الحرف اللاتيني الكبير I مع BREVE.

· كيف أجعل نصوصي تعمل مع Unicode؟

يجب أن تكون هناك حاجة إلى القليل من العمل حيث لا يتغير شيء حتى تقوم بإنشاء Unicode
بيانات. أهم شيء هو الحصول على مدخلات بتنسيق Unicode؛ ولهذا راجع ما سبق
مناقشة الإدخال/الإخراج. للحصول على دعم Unicode الكامل والسلس، قم بإضافة "استخدام الميزة
"unicode_strings" (أو "استخدام 5.012" أو أعلى) إلى البرنامج النصي الخاص بك.

· كيف أعرف ما إذا كانت سلسلتي موجودة في Unicode؟

لا ينبغي عليك أن تهتم. ولكن يمكنك ذلك إذا كان إصدار Perl الخاص بك قبل 5.14.0 أو لم تفعل ذلك
المحدد "استخدام الميزة 'unicode_strings'" أو "استخدام 5.012" (أو أعلى) لأنه بخلاف ذلك
تختلف قواعد نقاط الكود في النطاق من 128 إلى 255 اعتمادًا على
ما إذا كانت السلسلة الموجودة بداخلها موجودة في Unicode أم لا. (راجع "عندما يكون Unicode
لا يحدث" في perlunicode.)

لتحديد ما إذا كانت السلسلة موجودة في Unicode، استخدم:

طباعة utf8::is_utf8($string)؟ 1 : 0, "\n";

لكن لاحظ أن هذا لا يعني أن أيًا من الأحرف الموجودة في السلسلة ضروري
ترميز UTF-8، أو أن أيًا من الأحرف يحتوي على نقاط ترميز أكبر من 0xFF (255)
أو حتى 0x80 (128)، أو أن السلسلة تحتوي على أية أحرف على الإطلاق. كل "is_utf8 ()"
ما يفعله هو إرجاع قيمة علامة "utf8ness" الداخلية المرفقة بالسلسلة $.
إذا تم إيقاف تشغيل العلامة، يتم تفسير البايتات الموجودة في العددية على أنها تشفير بايت واحد.
إذا كانت العلامة قيد التشغيل، فسيتم تفسير البايتات الموجودة في العددية على أنها (طول متغير،
من المحتمل أن تكون متعددة البايت) نقاط ترميز UTF-8 للأحرف. البايتات المضافة إلى أ
تتم ترقية السلسلة المشفرة UTF-8 تلقائيًا إلى UTF-8. إذا كانت مختلطة غير UTF-8 و
يتم دمج وحدات UTF-8 القياسية (الاستيفاء بين علامات الاقتباس المزدوجة، أو التسلسل الصريح، أو
printf/sprintf)، ستكون النتيجة ترميز UTF-8 كما لو كانت نسخًا
تمت ترقية سلاسل البايت إلى UTF-8: على سبيل المثال،

$a = "ab\x80c";
$b = "\x{100}";
طباعة "$a = $b\n";

ستكون سلسلة الإخراج بترميز UTF-8 "ab\x80c = \x{100}\n"، لكن $a سيبقى بايت-
مشفر.

في بعض الأحيان قد تحتاج حقًا إلى معرفة طول البايت للسلسلة بدلاً من
طول الحرف. للقيام بذلك، استخدم إما وظيفة "Encode::encode_utf8()" أو وظيفة
براغما "البايتات" ووظيفة "الطول ()":

$unicode الخاص بي = مركز حقوق الإنسان(0x100)؛
طول الطباعة($unicode)، "\n"؛ # سيتم طباعة 1
تتطلب تشفير؛
طول الطباعة(Encode::encode_utf8($unicode)),"\n"; # سيتم طباعة 2
استخدام البايتات؛
طول الطباعة($unicode)، "\n"؛ # سيتم أيضًا طباعة 2
# (0xC4 0x80 من UTF-8)
لا بايت.

· كيف يمكنني معرفة ما هو ترميز الملف؟

يمكنك تجربة Encode::Guess، ولكن به عدد من القيود.

· كيف يمكنني اكتشاف البيانات غير الصالحة في ترميز معين؟

استخدم حزمة "Encode" لمحاولة تحويلها. على سبيل المثال،

استخدم التشفير "decode_utf8"؛

إذا (eval { decode_utf8($string, Encode::FB_CROAK); 1 }) {
# سلسلة $ صالحة لـ utf8
{} آخر
# السلسلة $ غير صالحة لـ utf8
}

أو استخدم "فك الحزمة" لمحاولة فك تشفيرها:

استخدام التحذيرات
@chars = unpack("C0U*", $string_of_bytes_that_I_think_is_utf8);

إذا كان غير صالح، يتم إصدار تحذير "حرف UTF-8 غير صحيح". "C0" يعني "العملية
حرف السلسلة لكل حرف". وبدون ذلك، سيعمل "unpack("U*,...)"".
في الوضع "U0" (الوضع الافتراضي إذا كانت سلسلة التنسيق تبدأ بـ "U") وستعود
البايتات التي تشكل ترميز UTF-8 للسلسلة المستهدفة، وهو الأمر الذي سيفعله
تعمل دائما.

· كيف يمكنني تحويل البيانات الثنائية إلى ترميز معين أو العكس؟

ربما لا يكون هذا مفيدًا كما تظن. عادة، لا ينبغي أن تحتاج إلى ذلك.

بمعنى ما، ما تطلبه ليس له معنى كبير: الترميزات مخصصة
الأحرف والبيانات الثنائية ليست "أحرفًا"، لذا يتم تحويل "البيانات" إلى بعضها
لا يكون الترميز ذا معنى إلا إذا كنت تعرف مجموعة الأحرف والتشفير
البيانات الثنائية موجودة، وفي هذه الحالة لا تكون مجرد بيانات ثنائية، أليس كذلك؟

إذا كان لديك تسلسل أولي من البايتات التي تعرف أنه يجب تفسيرها عبر ملف
ترميز معين، يمكنك استخدام "تشفير":

استخدم التشفير "from_to"؛
from_to($data, "iso-8859-1", "utf-8"); # من اللاتينية 1 إلى utf-8

يؤدي استدعاء "from_to()" إلى تغيير البايتات في $data، ولكن لا يوجد شيء جوهري حول
لقد تغيرت طبيعة السلسلة فيما يتعلق ببيرل. سواء قبل وبعد
عند المكالمة، تحتوي السلسلة $data على مجموعة من البايتات ذات 8 بتات فقط. بقدر ما هو بيرل
المعنية، يبقى ترميز السلسلة كـ "بايتات 8 بت أصلية للنظام".

يمكنك ربط هذا بوحدة "ترجمة" خيالية:

استخدام ترجمة؛
عبارتي $ = "نعم"؛
ترجمة::from_to($phrase, 'english', 'deutsch');
## العبارة تحتوي الآن على "Ja"

تتغير محتويات السلسلة، ولكن لا تتغير طبيعة السلسلة. بيرل لا يفعل ذلك
تعرف بعد المكالمة أكثر مما كانت عليه قبل أن تشير محتويات السلسلة إلى
اثبات.

العودة إلى تحويل البيانات. إذا كان لديك (أو تريد) بيانات في الإصدار 8 بت الأصلي لنظامك
الترميز (على سبيل المثال Latin-1، EBCDIC، وما إلى ذلك)، يمكنك استخدام الحزمة/التفريغ للتحويل من/إلى
يونيكود.

$native_string = pack("W*", unpack("U*", $Unicode_string));
$Unicode_string = pack("U*", unpack("W*", $native_string));

إذا كان لديك تسلسل البايتات لك علم UTF-8 صالح، لكن Perl لا يعرفه بعد،
يمكنك أن تجعل بيرل مؤمنًا أيضًا:

استخدم التشفير "decode_utf8"؛
$Unicode = decode_utf8($bytes);

أو:

$Unicode = pack("U0a*", $bytes);

يمكنك العثور على البايتات التي تشكل تسلسل UTF-8 باستخدام

@bytes = unpack("C*", $Unicode_string)

ويمكنك إنشاء Unicode جيد التنسيق باستخدام

$Unicode_string = pack("U*", 0xff, ...)

· كيف يمكنني عرض Unicode؟ كيف يمكنني إدخال Unicode؟

نرىhttp://www.alanwood.net/unicode/> و
<http://www.cl.cam.ac.uk/~mgk25/unicode.html>

· كيف يعمل Unicode مع اللغات التقليدية؟

إذا كانت لغتك المحلية هي لغة UTF-8، بدءًا من الإصدار 5.20 من Perl، فإن لغة Perl تعمل جيدًا للجميع
الفئات باستثناء "LC_COLLATE" التي تتعامل مع الفرز وعامل التشغيل "cmp".

بالنسبة للغات المحلية الأخرى، بدءًا من Perl 5.16، يمكنك تحديدها

استخدم اللغة ':not_characters'؛

لجعل بيرل يعمل بشكل جيد معهم. المهم هو أنه يجب عليك الترجمة من
قم بتعيين الأحرف المحلية إلى/من Unicode بنفسك. راجع "Unicode I/O" أعلاه لمعرفة كيفية القيام بذلك

استخدم مفتوح ': لغة'؛

لإنجاز هذا، ولكن التفاصيل الكاملة موجودة في "Unicode وUTF-8" في perllocale،
بما في ذلك الأخطاء التي تحدث إذا لم تحدد ":not_characters".

عشري التدوين
يفضل معيار Unicode استخدام التدوين السداسي العشري لأن ذلك يظهر بشكل أكثر وضوحًا
تقسيم Unicode إلى كتل مكونة من 256 حرفًا. النظام الست عشري هو أيضًا أقصر
من العشري. يمكنك استخدام التدوين العشري أيضًا، لكن تعلم استخدام النظام الست عشري فقط
يجعل الحياة أسهل مع معيار Unicode. يستخدم الترميز "U+HHHH" النظام الست عشري، لـ
مثال.

البادئة "0x" تعني رقمًا سداسيًا عشريًا، والأرقام هي 0-9 بالعربية (أو بالعربية، حالة
لا يهم). يمثل كل رقم سداسي عشري أربع بتات، أو نصف بايت. "مطبعة
0x..., "\n"" سيُظهر رقمًا سداسيًا عشريًا في النظام العشري، وسيُظهر "printf "%x\n, $decimal"
إظهار رقم عشري بالنظام الست عشري. إذا كان لديك فقط "الأرقام السداسية" للنظام الست عشري
الرقم، يمكنك استخدام الدالة "hex()".

طباعة 0x0009، "\n"؛ # 9
طباعة 0x000a، "\n"؛ # 10
طباعة 0x000f، "\n"؛ # 15
طباعة 0x0010، "\n"؛ # 16
طباعة 0x0011، "\n"؛ # 17
طباعة 0x0100، "\n"؛ # 256

طباعة 0x0041، "\n"؛ # 65

برينتف "%x\n"، 65؛ # 41
برينتف "%#x\n"، 65؛ #0x41

طباعة سداسي عشري("41"), "\n"; # 65

إضافي الموارد
· اتحاد يونيكود

<http://www.unicode.org/>

· الأسئلة الشائعة حول يونيكود

<http://www.unicode.org/unicode/faq/>

· معجم يونيكود

<http://www.unicode.org/glossary/>

يونيكود قائمة القراءة الموصى بها

لدى اتحاد Unicode قائمة بالمقالات والكتب، وبعضها يقدم الكثير
معالجة أكثر تعمقًا لليونيكود:http://unicode.org/resources/readinglist.html>

· مصادر مفيدة لليونيكود

<http://www.unicode.org/unicode/onlinedat/resources.html>

· Unicode والدعم المتعدد اللغات في HTML والخطوط ومتصفحات الويب والتطبيقات الأخرى

<http://www.alanwood.net/unicode/>

· الأسئلة الشائعة حول UTF-8 وUnicode لنظامي Unix/Linux

<http://www.cl.cam.ac.uk/~mgk25/unicode.html>

· مجموعات الأحرف القديمة

<http://www.czyborra.com/>http://www.eki.ee/letter/>

· يمكنك استكشاف معلومات متنوعة من ملفات بيانات Unicode باستخدام ملف
الوحدة النمطية "Unicode::UCD".

UNICODE IN اكبر سنا بيرلز


إذا لم تتمكن من ترقية Perl الخاص بك إلى الإصدار 5.8.0 أو الأحدث، فلا يزال بإمكانك إجراء بعض Unicode
المعالجة باستخدام الوحدات النمطية "Unicode::String"، و"Unicode::Map8"، و"Unicode::Map"،
متاح من CPAN. إذا كان لديك إعادة ترميز GNU مثبتًا، فيمكنك أيضًا استخدام Perl
الواجهة الأمامية "Convert::Recode" لتحويلات الأحرف.

فيما يلي تحويلات سريعة من ISO 8859-1 (Latin-1) بايت إلى UTF-8 بايت و
مرة أخرى، يعمل الكود حتى مع إصدارات Perl 5 الأقدم.

# ISO 8859-1 إلى UTF-8
s/([\x80-\xFF])/chr(0xC0|ord($1)>>6).chr(0x80|ord($1)&0x3F)/eg;

# UTF-8 إلى ISO 8859-1
s/([\xC2\xC3])([\x80-\xBF])/chr(ord($1)<<6&0xC0|ord($2)&0x3F)/eg;

استخدم perluniintro عبر الإنترنت باستخدام خدمات onworks.net


خوادم ومحطات عمل مجانية

قم بتنزيل تطبيقات Windows و Linux

أوامر لينكس

Ad