פורסם: 18/10/2017 - 19:19
נושא ההודעה: עברית ב-C++
|
היכן ניתן למצוא חומר מסודר (או חומר בכלל) בנושא של עברית ב-C++ (הצגה, ייצוג, אכסון בזיכרון, וכדומה)?
|
|
חזרה לתוכן הדיון |
פורסם: 18/10/2017 - 19:36
נושא ההודעה:
|
אחסון זאת לא בעייה זה שקוף.
תצוגה - תלוי ב-toolkit שלך, אבל בגדול מאוד, כולם מתמודדים עם זה. אתה זורק את העברית לפקד המתאים (textedit - inputline - label ומה שלא יהיה) וזה מוצג.
אם אתה צריך לדעת משהו יותר נמוך, כמו איפה המקום הויזואלי של תו לוגי (זה תלוי בכיווניות של הפסקא ולא רק בתוכן או הגופן). יש כמה מנועים שמשובצים בכל toolkit שנותנים לך מענה.
בקיצור - זה לא חלק מהשפה. אבל רב הזמן זה עובד שקוף.
מה אתה צריך לעשות בדיוק?
|
|
חזרה לתוכן הדיון |
פורסם: 19/10/2017 - 01:36
נושא ההודעה:
|
elcuco : | אחסון זאת לא בעייה זה שקוף.
תצוגה - תלוי ב-toolkit שלך, אבל בגדול מאוד, כולם מתמודדים עם זה. אתה זורק את העברית לפקד המתאים (textedit - inputline - label ומה שלא יהיה) וזה מוצג.
אם אתה צריך לדעת משהו יותר נמוך, כמו איפה המקום הויזואלי של תו לוגי (זה תלוי בכיווניות של הפסקא ולא רק בתוכן או הגופן). יש כמה מנועים שמשובצים בכל toolkit שנותנים לך מענה.
בקיצור - זה לא חלק מהשפה. אבל רב הזמן זה עובד שקוף.
מה אתה צריך לעשות בדיוק? |
נתחיל ברמה הכי נאיבית, איך מתרגמים את ה-y שבקטע הקוד הזה לתו עברי?
קוד: |
char x ='y'
cout << x |
|
|
חזרה לתוכן הדיון |
פורסם: 19/10/2017 - 05:47
נושא ההודעה:
|
קוד: |
char x ='ע'
cout << x
|
עברית זה unicode כמו בערך כל שפה אחרת היום
|
|
חזרה לתוכן הדיון |
פורסם: 19/10/2017 - 06:24
נושא ההודעה:
|
זה בטוח לא יעבוד. ++C עדיין לא מגדירה יוניקוד היטב.
האפשרויות הן:
קוד: | wchar_t x ='ע'
cout << x |
או יותר טוב:
קוד: | std::string s =u8"ע"
cout << s |
|
|
חזרה לתוכן הדיון |
פורסם: 20/10/2017 - 13:55
נושא ההודעה:
|
אחת ההרחבות ב boost, מאפשרת לך לכתוב את כל המחרוזות באנגלית, ולתרגם לעברית ולשפות אחרות בקובץ טקסט נפרד. בצורה כזאת אתה מתכנת רק מחרוזות באנגלית, ומפריד את העברית מהתכנה. אתה יכול לאפשר למתרגמים שהם לא מתכנתים להוסיף תרגום לתוכנה שלך בשפתם. זאת פרקטיקה נפוצה בקוד פתוח.
יש גם הרחבות נוספות שעושות את זה, אבל היתרון ב boost זה שהוא הכי בסיסי וסטנדרטי שאני מכיר, ולא תלוי במ"ה או שולחן עבודה.
http://www.boost.org/doc/libs/1_65_0/libs/locale/doc/html/messages_formatting.html
|
|
חזרה לתוכן הדיון |
פורסם: 16/04/2018 - 23:30
נושא ההודעה:
|
borsood : | זה בטוח לא יעבוד. ++C עדיין לא מגדירה יוניקוד היטב.
האפשרויות הן:
קוד: | wchar_t x ='ע'
cout << x |
או יותר טוב:
קוד: | std::string s =u8"ע"
cout << s |
|
אצלי זה:
קוד: | wchar_t x ='ע';
cout << x << endl; |
לא עובד אלא רק מחזיר את המספר 55202 ובהידור כותב את האזהרה קוד: | warning: multi-character character constant [-Wmultichar]. |
וזה
קוד: | std::string s=u8"ע";
cout << s; |
מחזיר את שגיאות ההידור:
קוד: | error: ‘u8’ was not declared in this scope
error: expected ‘,’ or ‘;’ before string constant
|
|
|
חזרה לתוכן הדיון |
פורסם: 17/04/2018 - 07:11
נושא ההודעה:
|
לחלק מהקומפילרים אתה צריך לומר שאתה רוצה לעבוד ב++c מודרני.
תוסיף
|
|
חזרה לתוכן הדיון |
פורסם: 17/04/2018 - 09:17
נושא ההודעה:
|
אתה מערבב בין תו קצר (single byte char) לבין תו ארוך wide char -
ב std::cout אתה משתמש לתוים קצרים ול multibyte (יוניקוד)
ב std::wcout אתה משתמש בשביל תווים ארוכים.
אתה יכול להמיר wchar_t ל multibyte עם wcstombs
|
|
חזרה לתוכן הדיון |
פורסם: 17/04/2018 - 14:53
נושא ההודעה:
|
זה:
קוד: | wchar_t x ='ע';
wcout << x << endl; |
נותן אזהרה בהידור warning: multi-character character constant [-Wmultichar] וכשמריצים מדפיס
גם נסיון להריץ את הלולאה הבאה:
קוד: |
wchar_t x =150000;
for (;x>=0;x--)
if (x=='ע')
wcout << x << endl;
|
מביא לאותה תוצאה, הן לגבי אזהרת ההידור, והן לגבי ההצגה של "?" בודד. (אני לא יודע מה הטווח של התקן (יוניקוד?) שמכיל האות "ע", ולכן לקחתי מספר 150000 שחשבתי שהוא גבוה מספיק)
וזה:
קוד: | std::string s=u8"ע";
cout << s; |
עובד רק עם cout, ולא עם wcout, רק שכאן נסיון להריץ לולאה שתציג את כל האותיות כמו בדוגמה למעלה נתקל בשגיאה. אני מניח שיש דרך אחרת לבצע זאת.
|
|
חזרה לתוכן הדיון |
פורסם: 17/04/2018 - 21:04
נושא ההודעה:
|
קוד: | #include <iostream>
int main()
{
wchar_t w = L'ע';
std::wcout << w << std::endl;
return 0;
} |
|
|
חזרה לתוכן הדיון |
פורסם: 18/04/2018 - 07:33
נושא ההודעה:
|
wchat_t לא נתמך היטב בלינוקס. בכל מקרה מהפכת האימוג'י מביאה לזה שגם בMS נוטשים את הקידוד הזה ועוברים לurf-8.
הקוד הבא יעבוד עם utf8 אבל לא בסביבות MS ו wchar_t ו wcout
קוד: | #include <iostream>
#include <string>
int main()
{
std::string s = u8"🤦" ;
std::cout << s << '\n';
return 0;
}
|
התצוגה היא בהתאם לזמינות הגופנים בסביבת ההרצה.
בסופו של דבר ברור שהתמיכה ביוניקוד בשפה קצת לא טובה, יש קבוצת עבודה שעובדת על זה, מקווה שהדברים ישתפרו לקראת c++20
|
|
חזרה לתוכן הדיון |
|