Unicode ב־C++‎ תיקון טעות.

16/04/09, מאת ארתיום; תחת נושאים: פיתוח, תכנה ומחשבים, C++‎‏, icode‏‏Un; ‏0 תגובות

עדכון קטן על תמיכה ב־Unicode ב־C++‎. למעשה, כשאמרתי בכתבה קודמת שאין כל תמיכה ב־Unicode, טעיתי. דווקא יש תמיכה אם כי היא לא מתקרבת למה ש־ICU נותן.

std::locale נותן מספר ממשקים בפרט: std::ctype<>‎ שמאפשר המרה של case והמרת קידוד בין קידוד מקומי כמו utf-8 או cp1255 למחרוזות של wchar_t. הוא מצליח להמודד עם מקרים יחסית פשוטים כמו המרת "Артём" (השם הפרטי שלי ברוסית) לאותיות גדולות וקטנות בצורה נכונה: АРТЁМ. דבר שכל הכלים, אפילו פחות מוצלחים כמו Python ו־qt3 מצליחים לבצע ללא בעיה.

אבל תמיכה מובנית עדיין לא מצליחה להתמודד עם מקרים מסובכים יותר כמו ß הגרמנית ו־Σ היוונית.

כך שלצרכים הבסיסיים, ניתן להסתפק ב־API של C++‎ כפישהו, אבל כמובן זאת לא תמיכה מלאה (כמו גם בשפות אחרות, משל Python).

לדוגמה toupper‏:

// Set global locale
locale::global(locale("en_US.UTF-8"));

// Now we can use locale for various purposes
wchar_t str[]=L"Артём";
use_facet<ctype<wchar_t> >(locale()).toupper(str,str+5);

ניתן לשלוח טראקבק לכתובת הבאה:

הוסף תגובה:

שם:
כתובת דוא"ל
אתר:

ניתן להשתמש בתחביר Markdown לכתיבת ההודעות.

חובה להפעיל JavaScript כדי לפרסם הערות.

עמודים

נושאים

עולם הסלסה

לינוקס ותוכנה חופשית

פרוייקטים שלי

פוסטים מומלצים