ما هو الفرق بين UTF-8 و Unicode


Answers

يستخدم "Unicode" للأسف بطرق مختلفة ، اعتمادًا على السياق. يعد الاستخدام الأكثر استخدامًا (IMO) بمثابة مجموعة أحرف مشفرة - أي مجموعة من الأحرف وتعيين بين الأحرف ونقاط رمز صحيحة تمثلها.

UTF-8 هو ترميز الأحرف - طريقة للتحويل من تسلسلات البايت إلى تسلسل من الأحرف والعكس صحيح. يغطي كامل مجموعة أحرف Unicode. يتم ترميز ASCII كبايت واحد لكل حرف ، بينما تأخذ الأحرف الأخرى المزيد من البايت بناءً على نقطة الرمز المحددة الخاصة بهم (حتى 4 بايت لكل نقاط التعليمة البرمجية المحددة حالياً ، أي حتى U-0010FFFF ، وبالفعل يمكن أن تتعامل 4 بايت مع ما يصل إلى U-001FFFFF).

عند استخدام "Unicode" كاسم ترميز الأحرف (على سبيل المثال خاصية .NET Encoding.Unicode ) ، فإنه عادةً ما يعني UTF-16 ، والذي يشفر UTF-16 الأكثر شيوعًا على هيئة وحدتي بايت. تستخدم بعض الأنظمة الأساسية (خصوصًا .NET و Java) UTF-16 كترميز أحرف "أصلي". هذا يؤدي إلى مشاكل شعر إذا كنت بحاجة للقلق بشأن الأحرف التي لا يمكن ترميزها في قيمة UTF-16 واحدة (يتم ترميزها كـ "أزواج بديلة") - ولكن معظم المطورين لا تقلق بشأن هذا ، IME.

بعض المراجع على Unicode:

Question

لقد سمعت آراء متضاربة من الناس - وفقا لويكيبيديا ، انظر هنا .

هم نفس الشيء ، أليس كذلك؟ يمكن للشخص توضيح؟




Unicode هو المعيار الذي يحدد ، إلى جانب ISO / IEC 10646 ، مجموعة الأحرف العالمية (UCS) والتي تعد مجموعة شاملة لجميع الأحرف الموجودة المطلوبة لتمثيل جميع اللغات المعروفة تقريبًا.

يعيّن Unicode اسم ورقم ( رمز الحرف ، أو رمز نقطة ) إلى كل حرف في المرجع الخاص به.

تشفير UTF-8 ، هو طريقة لتمثيل هذه الأحرف رقميًا في ذاكرة الكمبيوتر. يعين UTF-8 كل نقطة رمز في سلسلة من ثماني بتات (8 بايت)

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

UCS Character = Unicode Han Character

UCS code-point = U + 24B62

ترميز UTF-8 = F0 A4 AD A2 (عرافة) = 11110000 10100100 10101101 10100010 (بن)




هم نفس الشيء ، أليس كذلك؟

لا ، ليسوا كذلك.

أعتقد أن الجملة الأولى من صفحة ويكيبيديا التي أشرت إليها تعطي ملخصًا لطيفًا وجيزًا:

UTF-8 هو ترميز أحرف بعرض متغير قادر على ترميز جميع نقاط الشفرة الصالحة 1،112،064 في Unicode باستخدام واحد إلى أربعة بايت 8 بت.

لوضع:

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

    ! -> U+0021 (21),  
    " -> U+0022 (22),  
    \# -> U+0023 (23)
    
  • UTF-8 هي إحدى طرق ترميز نقاط التعليمة البرمجية هذه في نموذج يمكن أن يفهمه الكمبيوتر ، ويعرف أيضًا بتات . بمعنى آخر ، إنها طريقة / خوارزمية لتحويل كل نقطة من نقاط التعليمة البرمجية هذه إلى سلسلة من البتات أو تحويل سلسلة من البتات إلى نقاط الشفرة المكافئة. لاحظ أن هناك الكثير من الترميزات البديلة لـ Unicode.

يعطي جويل شرحًا رائعًا ونظرة عامة على التاريخ here .




لقد راجعت الروابط في إجابة Gumbo ، وكنت أرغب في لصق جزء من تلك الأشياء الموجودة هنا على أيضًا.

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

في الواقع ، لدى Unicode طريقة مختلفة للتفكير في الشخصيات ، ويجب أن تفهم طريقة Unicode في التفكير في الأشياء أو لا شيء سيكون له معنى.

حتى الآن ، افترضنا أن هناك حرفًا يقوم بتخطيط بعض البتات التي يمكنك تخزينها على القرص أو في الذاكرة:

أ -> 0100 0001

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

"... يتم تعيين رقم سحري لكل حرف أفلاطوني في كل أبجدية بواسطة اتحاد Unicode الذي تمت كتابته على النحو التالي: U + 0639. يسمى هذا الرقم السحري نقطة رمز. U + تعني" Unicode "والأرقام سداسي عشري. U + 0639 هي الرسالة العربية في عين العرب ، الرسالة الإنجليزية هي U + 0041 .... "

"... حسنًا ، لنفترض أن لدينا سلسلة:

مرحبا

والتي ، في Unicode ، يتوافق مع هذه النقاط رمز الخمسة:

U + 0048 U + 0065 U + 006C U + 006C U + 006F.

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

"... حيث تأتي الترميزات.

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

00 48 00 65 00 6C 00 6C 00 6F

حق؟ ليس بهذه السرعة! لا يمكن أن يكون كذلك:

48 00 65 00 6C 00 6C 00 6F 00؟ ... "




إنها ليست الشيء نفسه - UTF-8 هي طريقة معينة لترميز Unicode.

هناك الكثير من الترميزات المختلفة التي يمكنك الاختيار من بينها اعتمادًا على طلبك والبيانات التي تنوي استخدامها. الأكثر شيوعًا هو UTF-8 و UTF-16 و UTF-32 s كما أعرف.




تشرح الإجابات الحالية بالفعل الكثير من التفاصيل ، ولكن إليك إجابة قصيرة جدًا تحتوي على أفضل تفسير ومثال مباشر.

Unicode هو المعيار الذي يقوم بتعيين الأحرف إلى نقاط codepoints.
يحتوي كل حرف على codepoint فريد (رقم تعريف) ، وهو رقم مثل 9731.

UTF-8 هو ترميز نقاط codepoints.
لتخزين جميع الأحرف على القرص (في ملف) ، تقوم UTF-8 بتقسيم الأحرف إلى ما يصل إلى 4 ثماني بتات (8 بتات) - بايت. UTF-8 هو واحد من عدة ترميزات (طرق تمثيل البيانات). على سبيل المثال ، في Unicode ، يمثل codepoint 9731 ( ) رمز ثلج ( ) ، والذي يتكون من 3 بايت في UTF-8: E2 98 83

فيما يلي قائمة مرتبة مع بعض الأمثلة العشوائية .