سؤال

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

مثل العديد من قرأت بعناية ، يدركوا ذلك كانت عالية وصلت إلى السيطرة على هذه "استبدال ASCII".للأسف 5 سنوات أشعر أنني قد عادت بعض العادات السيئة في هذا المجال.أليس كذلك ؟

أنا لا أكتب على وجه التحديد العديد من الطلبات الدولية ، ومع ذلك لقد ساعدت في بناء العديد من ASP.NET التي تواجه الإنترنت المواقع ، لذلك أعتقد أن هذا ليس عذرا.

لذا لصالح بلدي (و أعتقد أن الكثير من الآخرين) هل يمكنني الحصول على بعض المدخلات من الناس على ما يلي:

  • كيفية "الحصول على أكثر من" ASCII مرة واحدة وإلى الأبد
  • التوجيهات الأساسية عند العمل مع يونيكود.
  • أوصى (الأخيرة) الكتب والمواقع على Unicode (للمطورين).
  • الحالة الراهنة Unicode (5 سنوات بعد Joels' المادة)
  • الاتجاهات المستقبلية.

يجب أن أعترف لدي .صافي الخلفية وهكذا أيضا سيكون سعيدا للحصول على معلومات حول Unicode في .NET framework.بالطبع هذا لا يجب أن توقف أي شخص مع اختلاف الخلفية من وتعليقا على الرغم من.

تحديث:انظر هذا السؤال ذات الصلة كما طلب على ستاكوفيرفلوو سابقا.

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

المحلول

منذ قرأت جويل المادة وغيرها من بعض I18n المواد ظللت دائما عن كثب إلى ترميز الأحرف;و كان يعمل في الواقع إذا كنت تفعل ذلك اتساقا.إذا كنت تعمل في شركة من حيث هو معيار استخدام UTF-8 و الجميع يعرف هذا / هل هذا سيكون العمل.

هنا بعض مقالات مثيرة للاهتمام (إلى جانب جويل المادة) حول هذا الموضوع:

اقتباس من أول المادة ؛ نصائح باستخدام Unicode:

  • احتضان Unicode لا تقاوم ؛ ربما الشيء الصحيح القيام به ، إذا لم يكن من المحتمل أن على أية حال.
  • داخل البرنامج, تخزين النص كما UTF-8 أو UTF-16;وهذا هو القول, اختيار واحد من اثنين من والعصا معه.
  • تبادل البيانات مع العالم الخارجي باستخدام XML كلما أمكن ذلك ؛ وهذا يجعل مجموعة كاملة من المشاكل المحتملة تذهب بعيدا.
  • في محاولة لجعل التطبيق الخاص بك يستند إلى مستعرض بدلا من الكتابة الخاصة بك العميل ؛ المتصفحات هي الحصول على حقا جيدة جدا في التعامل مع النصوص من العالم.
  • إذا كنت تستخدم مكتبة شخص آخر رمز (وطبعا أنت), تحمل Unicode التعامل مع مكسورة حتى يثبت أن يكون صحيحا.
  • إذا كنت تفعل البحث في محاولة اليد اللغوي والحرف-التعامل مع المشاكل إلى شخص يفهم لهم.
  • الذهاب إلى الأمازون أو في مكان ما و شراء أحدث تنقيح المطبوعة Unicode القياسية ؛ أنه يحتوي على جيد جدا كل ما تحتاج إلى معرفته.
  • قضاء بعض الوقت في التجول Unicode الموقع و تعلم كيفية رمز مخططات العمل.
  • إذا كنت تنوي أن تفعل أي عمل جاد مع اللغات الآسيوية أذهب لشراء أورايلي كتاب عن هذا الموضوع من قبل كين لوند.
  • إذا كان لديك جهاز ماكنتوش ، ينفد والاستيلاء على الرب بكسل Unicode الخط التفتيش أداة.باردة تماما.
  • إذا كنت حقا الحصول على أسفل والقذرة مع البيانات الذهاب لحضور واحدة من مرتين في السنة Unicode المؤتمرات.جميع الخبراء الذهاب و إذا كنت لا تعرف ما تحتاج إلى معرفته, سوف تكون قادرة على العثور على شخص ما هناك من يعرف.

نصائح أخرى

قضيت بعض الوقت في العمل مع محرك البحث البرمجيات - لن تصدق كيف العديد من المواقع على شبكة الإنترنت تخدم المحتوى مع رؤوس HTTP أو العلامات الفوقية التي تقع حول ترميز الصفحات.في كثير من الأحيان ، عليك حتى الحصول على مستند الذي يحتوي على كل من ISO-8859 الشخصيات UTF-8 أحرف.

مرة واحدة كنت قد حارب من خلال عدد قليل من هذه الأنواع من القضايا ، يمكنك البدء في تناول السليم حرف ترميز البيانات التي تنتج حقا على محمل الجد.

على .NET Framework يستخدم ويندوز الترميز الافتراضي لتخزين السلاسل ، والتي تبين أن يكون UTF-16.إذا كنت لا تحديد الترميز عند استخدام معظم النص I/O فصول ، سوف تكتب UTF-8 مع عدم وجود بوم وقراءة أولا التحقق من وجود بوم ثم على افتراض UTF-8 (أنا متأكد StreamReader و StreamWriter تتصرف بهذه الطريقة.) هذا هو آمن جدا ل "غبية" النص المحررين التي لن تفهم BOM ولكن نوع من حالتك على أكثر ذكاء من تلك التي يمكن عرض UTF-8 أو حالة حيث كنت في الواقع كتابة الأحرف خارج ASCII القياسية النطاق.

عادة هذا هو غير مرئي, ولكن يمكن برأسه بطرق مثيرة للاهتمام.أمس كنت أعمل مع شخص ما باستخدام XML التسلسل إلى تسلسل كائن إلى سلسلة باستخدام StringWriter, و لم يستطع معرفة لماذا ترميز كان دائما UTF-16.منذ سلسلة في الذاكرة سوف يكون UTF-16 و التي يتم فرضها من قبل .صافي هذا هو الشيء الوحيد الذي XML التسلسل الإطار يمكن القيام به.

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

يجعلني أبكي قليلا في كل مرة أرى شخص ما يسأل: "كيف يمكنني الحصول على بايت من سلسلة ؟" الحل المقترح يستخدم Encoding.ASCII.GetBytes() :(

سيادة الإبهام:لو كنت أبدا "مونج" أو نظرة من الداخل سلسلة وبدلا من التعامل معها بدقة ككائن من البيانات ، عليك أن تكون أفضل حالا بكثير.

حتى القيام بشيء بسيط مثل تقسيم الكلمات أو lowercasing سلاسل يصبح صعبا إذا كنت تريد أن تفعل ذلك "Unicode الطريق".

وإذا كنت تريد أن تفعل ذلك "Unicode الطريق", سوف تحتاج جيد بفظاعة المكتبة.هذه الاشياء هي معقدة بشكل لا يصدق.

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