سؤال

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

أنا أبحث عن بعض الخير ، إلى نقطة الموارد لتعلم أنواع مختلفة من حرف ترميز و تحويل بينهما (يفضل أن يكون في C#).كل الكتب و الموارد على الانترنت هي موضع ترحيب.

شكرا


تعديل 1:

شكرا على الردود حتى الآن.أنا لا سيما تبحث عن المزيد من المعلومات المتعلقة .صافي مقابض الترميز.أعرف أن هذا قد يبدو غامضا ولكن أنا حقا لا أعرف ماذا أطلب.أعتقد أنني غريبة عن كيفية ترميز ممثلة في C# string class وعما إذا كانت الطبقة نفسها يمكن إدارة مختلف أنواع الترميز أو هناك تفريق الصفوف من أجل هذا ؟

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

المحلول

أود أن تبدأ مع هذا السؤال: ما هي الشخصية ؟

  • هوية المنطقي:a codepoint.Unicode يعين عدد كل حرف التي ليست بالضرورة ذات صلة إلى أي بت/بايت شكل.ترميزات (مثل UTF-8) تحديد الخرائط بايت القيم.
  • بت وبايت:على ترميز شكل.واحد أو أكثر من وحدات البايت في codepoint والقيم التي يحددها الترميز المستخدم.
  • شيء تراه على الشاشة:a رسمه.على رسمه يتم إنشاؤه من واحد أو أكثر من codepoints.هذه هي الاشياء في عرض نهاية الأشياء.

هذا كود يحول in.txt من windows-1252 إلى UTF-8 وحفظها out.txt.

using System;
using System.IO;
using System.Text;
public class Enc {
  public static void Main(String[] args) {
    Encoding win1252 = Encoding.GetEncoding(1252);
    Encoding utf8 = Encoding.UTF8;
    using(StreamReader reader = new StreamReader("in.txt", win1252)) {
      using(StreamWriter writer = new StreamWriter("out.txt", false, utf8)) {
        char[] buffer = new char[1024];
        while(reader.Peek() > 0) {
          int r = reader.Read(buffer, 0, buffer.Length);
          writer.Write(buffer, 0, r); 
        }
      }
    }
  }
}

اثنين من التحولات يحدث هنا.أولا بايت فك الشفرة من windows-1252 إلى UTF-16 (little endian أعتقد) في char العازلة.ثم العازلة تتحول إلى UTF-8.

Codepoints

بعض التعليمة البرمجية الموجودة في المثال نقاط:

  • U+0041 هو اللاتينية حرف A (أ)
  • U+00A3 هو الجنيه (£)
  • U+042F هو السيريلية حرف يا (Я)
  • U+1D50A هو الرياضية FRAKTUR العاصمة ز (𝔊)

ترميزات

في أي مكان كنت تعمل مع الشخصيات سيكون في ترميز بعض النموذج.C# يستخدم ترميز UTF-16 بالنسبة لها char, الذي يعرف 16 بت واسعة.

يمكنك التفكير في الترميز مثل جداول رسم الخرائط بين codepoints و بايت التمثيل.

CODEPOINT       UTF-16BE        UTF-8     WINDOWS-1252
U+0041 (A)         00 41           41               41
U+00A3 (£)         00 A3        C2 A3               A3
U+042F (Ya)        04 2F        D0 AF                -
U+1D50A      D8 35 DD 0A  F0 9D 94 8A                -

على النظام.النص.ترميز فئة يعرض أنواع/طرق لأداء التحولات.

وgraphemes

على رسمه تراه على الشاشة قد شيدت من أكثر من واحد codepoint.الحرف e-الحاد (é) يمكن أن تكون ممثلة مع اثنين من codepoints, اللاتينية الصغيرة حرف E U+0065 ، الجمع بين اللهجة الحادة U+0301.

('é' هو أكثر عادة تمثلها codepoint U+00E9.يمكنك التبديل بينها باستخدام التطبيع.ليس كل الجمع بين تسلسل يكون حرف واحد ما يعادلها ، على الرغم من.)

الاستنتاجات

  • عند ترميز C# string إلى ترميز تقوم التحول من UTF-16 إلى هذا الترميز.
  • ترميز يمكن الضياع التحول الأكثر Unicode ترميزات فقط ترميز مجموعة فرعية من الشخصيات الموجودة.
  • لأن ليس كل codepoints يمكن أن تندرج في واحد C# شار عدد من الأحرف في سلسلة قد تكون أكثر من عدد codepoints وعدد من codepoints قد يكون أكبر من عدد من المقدمة وgraphemes.
  • "طول" سلسلة حساسة للسياق ، لذلك عليك أن تعرف ما معنى أنك تطبيق و استخدام الخوارزمية المناسبة.كيف يتم التعامل مع هذا هو تعريف لغة البرمجة التي تستخدمها.
  • إعطاء اللاتينية-1 أحرف متطابقة القيم في العديد من ترميزات يعطي بعض الناس أوهام ASCII.

(هذا هو قليلا أكثر مهزار مما كنت المقصود, وربما أكثر مما تريد ، لذا سأتوقف.كتبت أكثر مهزار وظيفة على جافا ترميز هنا.)

نصائح أخرى

ويكيبيديا لديه تفسير جيد جدا من ترميز الأحرف بشكل عام: http://en.wikipedia.org / ويكي / Character_encoding .

إذا كنت تبحث عن تفاصيل UTF-8، التي تعد واحدة من ترميزات أكثر الشخصيات شعبية، يجب أن تقرأ في UTF-8 و Unicode التعليمات .

و، كما سبق أن ذكرنا، "المطلق الدنيا كل مطور برامج على الاطلاق، هل يجب إيجابيا معرفته عن يونيكود ومجموعات الأحرف (لا أعذار!) " هو مبتدئين جيد جدا البرنامج التعليمي.

وهناك المادة جويل الشهيرة "المطور المطلق الدنيا كل البرامج على الاطلاق، إيجابيا يجب أن تعرفه عن يونيكود ومجموعات الأحرف (لا أعذار!)" http://www.joelonsoftware.com/articles/Unicode.html

وتحرير: على الرغم من أن هذا هو أكثر حول تنسيقات النص، في إعادة قراءة وأنا أعتقد أنك أكثر اهتماما في أشياء مثل ترميز HTML و ترميز رابط؟ التي هي للهروب من الأحرف الخاصة التي لها معان كبيرة داخل أتش تي أم أل أو عناوين المواقع (على سبيل المثال <و> في أتش تي أم أل، أو؟ و= في عناوين المواقع)

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