سؤال

وكيف يمكنني تحويل سلسلة wchar_t من حالة العليا لخفض الحال في C ++؟

وسلسلة تحتوي على خليط من اليابانية والصينية والألمانية واليونانية حرفا.

وفكرت باستخدام towlower ...

http://msdn.microsoft.com/ أون لنا / مكتبة / 8h19t214٪ 28VS.80٪ 29.aspx

و.. لكنها تقول الوثائق:

<اقتباس فقرة>   

وتحويل حالة towlower هو الإعدادات المحلية الخاصة. يتم تغيير الارقام ذات الصلة للغة الحالية في القضية.

وتحرير: ربما ينبغي لي أن أصف ما أقوم به. أتلقى استعلام البحث يونيكود من مستخدم. انها في الأصل في ترميز UTF-8، ولكن أنا تحويله إلى widechar (قد أكون مخطئا على صيغة). بلدي المصحح (VS2008) يظهر بشكل صحيح اليابانية والألمانية وغيرها الأحرف في في "مراقبة سريعة متغير". لست بحاجة للذهاب من خلال مجموعة أخرى من البيانات في Unicode والبحث عن مباريات السلسلة البحث. في حين أن هذا لا يشكل مشكلة بالنسبة لي أن أفعل عند البحث حساس لحالة الأحرف، انها أكثر صعوبة للقيام بذلك حالة الأحرف. أن توجهي (ربما السذاجة) لحل المشكلة يكون لتحويل جميع البيانات المدخلة وإخراج البيانات إلى حالة السفلية ثم مقارنتها.

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

المحلول

إذا سلسلة الخاص بك يحتوي على جميع تلك الأحرف، يجب أن يكون codeset يستند إلى Unicode. إذا نفذت بشكل صحيح، يونيكود (الفصل 4 '<لأ href = "HTTP: // www.unicode.org/versions/Unicode5.2.0/ch04.pdf "يختلط =" noreferrer "> حرف خصائص ') يحدد خصائص الحرف بما في ذلك ما إذا كان الحرف هو حالة العلوي والسفلي رسم الخرائط الحالة، وهلم جرا.

وبالنظر إلى أن ديباجة، وظيفة towlower() من <wctype.h> هي الأداة الصحيحة لاستخدامها. إذا كان لا قيام بهذه المهمة، لديك مشكلة QoI (جودة التنفيذ) لمناقشة مع البائع الخاص. إذا وجدت بائع لا تستجيب، ثم ننظر في مكتبات بديلة. في هذه الحالة، قد تفكر في ICU (ومكونات الدولي لليونيكود).

نصائح أخرى

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

هذه الإجابة SO يبين كيفية التعامل مع جوانب للعمل مع العديد من اللغات. إذا كان هذا هو على ويندوز، يمكنك أن تنظر في استخدام دالات Win32 API، إذا كنت تستطيع العمل مع C ++. NET (إدارتها C ++)، يمكنك استخدام وظائف char.ToLower وstring.ToLower، والتي هي متوافقة مع يونيكود.

وإلقاء نظرة على _wcslwr_l في <wchar.h> ( MSDN ).

ويجب أن تكون قادرة على تشغيل الدالة على مدخلات لكل من اللغات.

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