سؤال

ما هو الفرق بين UTF و UCS.

ما هي أفضل الطرق لا تمثل الأوروبية مجموعات الأحرف (باستخدام UTF) في C++ السلاسل.أود أن أعرف التوصيات:

  • الداخلية التمثيل داخل كود
    • سلسلة التلاعب في وقت التشغيل
    • استخدام سلسلة لأغراض العرض.
  • أفضل تخزين التمثيل (أي في الملف)
  • أفضل على سلك النقل شكل (التحويل بين التطبيقات التي قد تكون على أبنية مختلفة و مختلفة معيار اللغة)
هل كانت مفيدة؟

المحلول

ما هو الفرق بين UTF و UCS.

UCS ترميزات يتم عرض ثابت ، و تميزت كم بايت لكل حرف.على سبيل المثال ، UCS-2 يتطلب 2 بايت لكل حرف.الشخصيات مع رمز نقطة خارج النطاق المتاح لا يمكن ترميز في UCS الترميز.

UTF ترميزات يتم عرض متغير ، و تميزت الحد الأدنى لعدد بت لتخزين حرف.على سبيل المثال, UTF-16 يتطلب على الأقل 16 بت (2 بايت) لكل حرف.الشخصيات مع رمز كبير من النقاط تم ترميزها باستخدام عدد أكبر من وحدات البايت -- 4 بايت نجمي الشخصيات في UTF-16.

  • الداخلية التمثيل داخل كود
  • أفضل تخزين التمثيل (أيفي الملف)
  • أفضل على سلك النقل شكل (التحويل بين التطبيقات التي قد يكون على أبنية مختلفة و مختلفة معيار اللغة)

النظم الحديثة معقولة التخزين والنقل ترميز UTF-8.هناك حالات خاصة حيث الآخرين قد يكون من المناسب -- UTF-7 القديم ملقمات البريد UTF-16 سيئة كتابة النص المحررين-ولكن UTF-8 هو الأكثر شيوعا.

يفضل تمثيل داخلي يعتمد على النظام الأساسي الخاص بك.في نظام التشغيل Windows هو UTF-16.في يونكس ، فمن UCS-4.كل النقاط الجيدة:

  • UTF-16 سلاسل أبدا استخدام المزيد من الذاكرة من UCS-4 سلسلة.إذا قمت بتخزين العديد من سلاسل كبيرة مع شخصيات في المقام الأول الأساسي متعدد اللغات الطائرة (BMP) ، UTF-16 سوف تتطلب مساحة أقل بكثير من UCS-4.خارج BMP, فإنه سيتم استخدام نفس المبلغ.
  • UCS-4 أسهل أن سبب عنه.لأن UTF-16 حرفا قد تقسم على عدة البديل "أزواج" ، فإنه يمكن أن يكون تحديا بشكل صحيح الانقسام أو تقديم سلسلة.UCS-4 لم يكن النص في هذه المسألة.UCS-4 كما يعمل كثيرا مثل نص ASCII في "شار" المصفوفات ، لذلك النص الحالي خوارزميات يمكن تصديرها بسهولة.

وأخيرا ، فإن بعض النظم تستخدم UTF-8 داخلية الشكل.وهذا أمر جيد إذا كنت بحاجة إلى إنتر-تعمل مع القائمة ASCII - أو ISO-8859-النظم القائمة لأن بايت فارغة ليست موجودة في منتصف UTF-8 النص-فهي في UTF-16 أو UCS-4.

نصائح أخرى

أود أن أقترح:

  • التمثيل في التعليمات البرمجية ، wchar_t أو ما يعادلها.
  • للتخزين التمثيل UTF-8.
  • عن سلك التمثيل UTF-8.

ميزة UTF-8 في تخزين سلك الحالات هو أن آلة endianness ليس عاملا.الاستفادة من استخدام حجم ثابت الحرف مثل wchar_t في الكود هو أنه يمكنك بسهولة معرفة طول السلسلة دون الحاجة إلى مسح.

UTC هو التوقيت العالمي ، وليس الأحرف تعيين (لم أجد أي محارف يسمى UTC).

الداخلية التمثيل ، قد ترغب في استخدام wchar_t لكل حرف ، std::wstring سلاسل.أنها تستخدم بالضبط 2 بايت لكل حرف ، لذلك تسعى الوصول العشوائي سوف تكون سريعة.

للتخزين ، إذا كان معظم البيانات غير ASCII (أيcode >= 128) ، قد ترغب في استخدام UTF-16 وهو تقريبا نفس تسلسل wstring و wchar_t.

منذ UTF-16 يمكن little endian أو endian كبير ، سلك النقل ، في محاولة تحويله إلى UTF-8 الذي هو بنية مستقلة.

في تمثيل داخلي داخل رمز من الأفضل القيام بذلك على حد سواء الأوروبية وغير الأوروبية الشخصيات:

\uNNNN

الشخصيات في مجموعة \u0020 إلى \u007E و قليلا من بيضاء (مثلنهاية السطر) كما يمكن كتابة الأحرف العادية.أي شيء فوق \u0080, إذا كنت أكتب على أنها شخصية عادية ثم فإنه سيتم تجميع فقط في كود الصفحة (على سبيل المثالطيب في فرنسا ولكن كسر في روسيا ، حسنا في روسيا ولكن كسر في اليابان ، حسنا في الصين ولكن كسر في الولايات المتحدة ، إلخ.).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top