سؤال

وهكذا أريد استخدام SetThreadLocale لتحديد المواضيع مخطط لUTF8. حتى الآن، لقد تم استخدام المعلمة الثانية من وحدات الماكرو تحويل سلسلة ATL مثل "CT2A (szBUF، CP_UTF8)" للقيام بذلك. ولكن أريد أن تكون قادرة على تعيين مخطط الشفرة موضوع مرة واحدة في بداية مع SetThreadLocale () و لا داعي لاستخدام المعلمة الثانية من الماكرو تحويل مرة أخرى.

وكيف أفعل ذلك؟ سوف SetThreadLocale لا تأخذ المعلمة الشفرة مثل CP_UTF8، مجرد LCID. ما المعايير التي يجب أن تكون تغذية SetThreadLocale لتحقيق هذا؟

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

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

المحلول

وSetThreadLocale تتوقع معرف اللغة، ولكن UTF-8 ليس معرف اللغة - انها ترميز Unicode. واحدة من أغراض ID الأرض هو أن نقول للنظام كيفية التعامل مع النص ANSI في نطاق 128-255. وبالنظر إلى لغة حقيقية، صفحة مدونتها سيتم استخدامها عند التعامل مع مثل هذه الشخصيات. UTF-8، OTOH، هو تمثيل مضغوط نص Unicode. من أجل خلق UTF-8 النص، الإدخال يجب أن يكون يونيكود. نظرا نص ANSI، أنت فقط لن يعرف كيفية تحويل النطاق العلوي من الأحرف. هذا هو الطريق عند القيام به "يدويا"، من أجل تحويل ANSI إلى UTF-8 لديك لاستخدام MultiByteToWideChar الأولى مع مخطط الشفرة المحدد، وبعد ذلك فقط يمكنك تحويل سلسلة Unicode الناتجة إلى UTF-8.

والآن، والعودة إلى سؤالك - أود أن أذهب وسيلة أخرى. إذا كان الخلل إضافية مخطط الشفرة المعلمة التي كثيرا، وجعل ماكرو الذي سوف إخفائه أو نحو ذلك (أو ترث الفئة CT2A ويكون ثاني المعلمة الثابتة).

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