لماذا .NET Framework StreamReader / الكاتب الافتراضي إلى ترميز UTF8?

StackOverflow https://stackoverflow.com/questions/856990

سؤال

أنا فقط أبحث في منشئات عن StreamReader / الكاتب أنا ملاحظة أنه يستخدم UTF8 كما الافتراضي.أحد يعرف لماذا هذا ؟ كنت قد يفترض أنه كان رهان أكثر أمانا الافتراضي إلى Unicode.

هل كانت مفيدة؟

المحلول

وسوف UTF-8 تعمل مع أي وثيقة ASCII، وعادة ما يكون أكثر إحكاما من UTF-16 - لكنه لا يزال يغطي كامل يونيكود. أود أن أقول أن UTF-8 هو <م> الآن أكثر شيوعا من UTF-16. كما انها الافتراضي XML (عندما لم يكن هناك BOM ولا ترميز واضح معين).

لماذا تعتقد أنه سيكون من الأفضل إلى الافتراضي إلى UTF-16؟ (وهذا ما هو Encoding.Unicode).

وتحرير: وأظن كنت الخلط حول ما يمكن التعامل مع UTF-8. هذه الصفحة تصفه جدا بشكل واضح، بما في ذلك كيفية يتم ترميز أي حرف Unicode معين. انها ترميز متغير العرض، ولكنه يغطي كامل يونيكود.

نصائح أخرى

UTF8 هو Unicode أكثر تحديدا واحدة من ترميز Unicode أنواع.

الأهم هو معكوس متوافق مع ASCII, بالاضافة الى انها القياسية الافتراضية لـ XML و HTML

و"يونيكود" هو اسم من مستوى، لذلك ليس هناك مثل هذا الترميز بأنها "يونيكود". بدلا من ذلك، هناك طريقتان لرسم الخرائط: UTF و <لأ href = "HTTP: // EN .wikipedia.org / ويكي / Universal_Character_Set "يختلط =" نوفولو noreferrer "> UCS .

وأما بالنسبة "لماذا" جزء، UTF-8 لديها أقصى قدر من التوافق مع ASCII.

وكما كل الآخرين قال بالفعل، UTF-8 هو معيار التشفير ضمن يونيكود. يستخدم UTF-8 عدد متغير من وحدات البايت لتشفير جميع الشخصيات يونيكود هناك.

ويتم تمثيل كافة الأحرف ASCII كما هو، بحيث ملفات ASCII يمكن قراءتها مع مزيد من اللغط الآن. حالما بايت في تيار له قليلا 8TH لها (أعلى قليلا،> 127) مجموعة، وهذا يؤدي القارئ إلى الجمع بين ذلك مع البايت التالي حتى ذلك هو <128. الجمع ثم يعتبر الحرف 1.

وهناك شخصيات في اللاتينية-1 (ANSII)، التي تم ترميزها باستخدام حرفين: على سبيل المثال é يتم ترميز كبريد و. طول ( 'ه') وبالتالي هو 2.

ويستخدم نظام التشغيل Windows UTF-16 داخليا، مما يحد من الشخصيات encodable إلى 64K، وهو بأي حال من الأحوال كافة الأحرف Unicde. UTF-32 في الوقت الراهن يسمح لجميع الشخصيات، ولكن يقتصر مصطنع جدا. وكلاهما غير متوافق صعودا إلى ASCII، كما الأصفار ديك الرائدة:

A = ASCII h41 = UTF-8 h41 = UTF-16 h0041 = UTF-32 h00000041

وهناك أيضا قليلا والكبيرة ترميزات endian:

A = UTF-16 big endian h0041 = UTF-16 little endian h4100

وتخيل باستخدام UTF16 أو UTF32 لحفظ الملفات. انهم (للملفات النصية) ضعف أو quadrouple في الحجم بالمقارنة مع ASCII وUTF-8 (UTF-8 في حالة استخدام أحرف ASCII فقط). UTF-8 لا يسمح فقط لجميع الشخصيات في معيار يونيكود، حتى بالنسبة للتحسينات في المستقبل، ولكن حفظها الفضاء كفاءة أيضا.

وعادة بايت الأولين من ملف، BOM أو ترتيب بايت ماركر، اقول لكم، التي الترميز القياسي يستخدم. إذا تم حذفها، XML وStreamRedaer استخدام UTF-8، كما تبين. وهذا يجعل من جديد العمالي، كملفات ASCII لم يكن لديك BOM وبالتالي في معظم الحالات تتم قراءة بشكل صحيح. هذا قد لا يكون صحيحا عن الملفات باستخدام كل من اللاتينية-1.

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