‏הצגת רשומות עם תוויות תרגום. הצג את כל הרשומות
‏הצגת רשומות עם תוויות תרגום. הצג את כל הרשומות

יום שישי, אפריל 22, 2016

תקלות קידוד שפה בבסיס נתונים PostgreSql.

תקלות קידוד שפה בבסיס נתונים  PostgreSql .

על מנת להקל על הקורא דבר ראשון אם אתה רוצה להמנע מחיים קשים בהקשר של קידוד (ואתה לא על  SQL Server ) המנע מהתקנת השרת על וינדוס. אם אתה לא יכול לפחות המנע ממה שהוא לא SQL_ASCII והשתמש רק בשפה האנגלית.

אם אתה בוחר להתקין שרת בסיס נתונים על וינדוס או שאתה בוחר להשתמש בשפה שאינה אנגלית (אמריקאית) צפה לפגיעה.

הקורא הממוצע ישאל מה יש לכותב כנגד שפות שהן לא אנגלית אמריקאית ?

אתם מבינים בעולם התוכנה, יש מספר יצרנים לצערי מרמת מערכת ההפעלה ועד שמירת המידע בבסיס הנתונים הנחת הבסיס היא שיש שימוש באנגלית אמריקאית  (אפילו התקן של בסיס הנתונים מתייחס ל ANSI).

מדוע אני בתור איש וינדוס אומר להמנע משימוש בוינדוס כמערכת עבור בסיס נתונים במקרה הזה ?
התמיכה בקידודים ו locale שאינם en_us לדעתי לוקה בחסר, כברירת מחדל אין תמיכה ביוניקוד (צריך להריץ chcp 65001 בשביל להפעיל תמיכה למשל ביניקוד).

כאשר אנו מעבירים מידע  בין תוכנת לקוח לשרת  -  אנו  כפופים  לסוג הקידוד של מערכת הפעלה (מה שידוע כ code page) למאפייני השפה הנוכחים (locale) אופי קידוד המידע שיועבר ממערכת ההפעלה של הלקוח , אופי קידוד המידע בצד שרת ברמת הצד המקבל, אוקי קידוד המידע ברמת מערכת ההפעלה בצד המקבל , אוקי קידוד המידע בתוך בסיס הנתונים עצמו.

בעייה קלאסית כשמתקינים בסיס נתונים היא שימוש בשפה שאינה אנגלית ו Collate ברירת מחדל.

הבעיה היא שבדר"כ יש יותר מדרך אחת להציג מידע ובחירת השפה "עברית" בצד שרת ובחירת שפה "עברית" בצד לקוח לא באמת מחייב שהמידע יעבור תקין.

סיבה קלאסית היא הסתמכות על הקידוד מערכת ההפעלה ושימוש בקידוד ברירת מחדל, כשאנו למשל מדברים על עברית זה יכול להיות : UTF16* , ISO-8859-8, UTF8, CP1255,CP 862 ,ISO646.

ממה שאני ראיתי לרוב באפליקציות מהעשור האחרון דובר על CP122 ו iso8859-8 (לא נתקלתי במצב הגיוני של UTF16 או 8 כברירת מחדל עד היום).

בעולם הוינדוס בשביל לגלות במה משתמשים נשתמש בפקודה CHCP בשביל לגלות על איזה קידוד נמצא המשתמש בחיבור הנוכחי (session).

במידה ונבחרו ברירות מחדל נאלץ לגלות מהו קידוד השרת בsession הנוכחי  (המידע בתוך בסיס הנתונים ומערכת ההפעלה בבסיס הנתונים עצמו) ולנסות לכוון את האפליקציה להשתמש באותו הקידוד (להגדיר chcp זהה) .


אם יש לנו גישה לקוד המקור נוכל להגדיר את הקידוד ברמת ה session (במקרה של ODBC) -
לדוגמה עבור PG ניתן להגדיר את הקידוד בצורה הבאה :

"SET client_encoding= 'UTF8'"

ואז לשלוח את המידע כשהוא עבר קידוד ל UTF8 (כל מחרוזת שנשלח צריכה לעבור קידוד ישירות ל UTF8 לפני ההגעה לקו)

פתרון נוסף הוא בחירת הקידוד ברמת החיבור בהנחה שהדריבר שאנו עובדים איתו תומך בunicode :

std::string url = "odbc:postgresql://url:ip/databse&client_encoding=UTF8"

חשוב לציין שאם מחרוזת החיבור נובעת מ DSN אז אפשר לבצע את ההחלפה גם בתוך ה DSN עצמו.

במידה ומשתמשים ב DSN תחת FreeTDS שם הפרמטר הוא ClientCharset והקידוד הוא לפי iconv ובגרסה הקניינית שם הפרמטר הוא Charset.
אצל אורקל שם הארגומנט הוא DatabaseCharacterSet


במידה במידה ואנו עובדים עם קידוד פנימי של שני בתים (wchar_t/UCS2)  ולא יכולים לשנות את מחרוזת החיבור הוא להחליף את הדריבר הרגיל לדוגמה psqlodbc.so ל psqlodbcw.so) ולהתבסס על המרת ברירת מחדל (בגרסאות ישנות של posgresql הפתרון היה פשוט להשתמש ב UCS2 ל UCS2 אם גם השרת וגם הלקוח הם עובדים על וינדוס).

לפעמים נתפתה פשוט תמיד להשתמש ב UTF8 תמיד ולצפות לטוב, הבעיה (אהם פרל אהם פרל) שלא כל השפות והדריברים תומכים בהמרה בין יוניקוד לשפה הנדרשת (EUC_JP לדוגמה) ואז נצטרך לבצע את ההמרה או באפליקציה שלנו או ברמת הדריבר או לבקש מבסיס הנתונים שלנו לבצע המרה.

המרה  ברמת הפעולה בבסיס הנתונים תראה בערך כך :

convert ( text , 'sourceencoding' , 'destencoding')

הממרה ברמת השפה איתה אנו משתמשים תראה בערך כך :

Perl:
$internalEncoding = decode( 'iso-8859-8', $var );
$result = encode( 'utf-8', $internalEncoding );
Java:
Charset utf8 = Charset.forName("UTF-8");
Charset iso8859_8 = Charset.forName("ISO-8859-8");
CharBuffer data = iso8859_8.decode(inputBuffer);
ByteBuffer output = utf8.encode(data);


iconv - C:

iconv_t cnv = iconv_open("UTF-8", "ISO_8859-8"); if (-1 == cnv) { return ; }
int ret = iconv(cnv, &text_in_8859_8, &length_of_text_in_8859_8, &text_in_utf8, &length_of_text_in_utf8);


יום שישי, ינואר 06, 2012

איך קוראים לשפה הזאת ?

במהלך לימודי בחטיבה ובתיכון נחשפתי לשפה בה כותבים טקסט באמצעות סימני האצבעות,
זה היה מאוד יעיל שיכלת לדבר כשיש רעש או לא שומעים אבל רואים.
לאורך שנים חשבתי שזה היה סתם משהוא מוזר אבל בשנים האחרונות למדתי כי השפה מוכרת לאנשים מהצפון  ומהדרום.


הכללים שאני מכיר הם :

א - אצבע מורה ואגודל של יד ימין צמודה לאצבע מורה ואגודל של יד שמאל (נוצר סימן של דלטון).
ב - שתי אצבעות יד ימין
ג- שלוש אצבעות של יד ימין (מורה , אמה וקמיצה) ואגודל וזרת מחוברות.
ד - כל האצבות פרט לאגודל פרוסות האגודל מקופל פנימה.
ה- יד פתוחה .
ו - אצבע מורה של יד ימין פתוחה כל שאר העצבות סגורות.
ז - אצבע מורה יד ימין מאונכת ומעל לאצבע מורה של שמאל , יד שמאל מאונכת לקרקע
ח - אגודל ואצבע מורה פתוחים ומקבילים היד מוצבת כאשר האגודל מאונך לקרקע (נוצרת צורת האות ח)
ט - אצבע מורה מקופלת אגודל פתוח נוצרת צורת האות ט.
י - רק זרת ימין כל שאר היד סגורות.
כ - אגודל ואצבע מורה פתוחים ומקבילים היד מוצבת כאשר האגודל מקביל לקרקע (נוצרת צורת האות כ)
ל - אצבעות מורות שלובות ידים שאר האצבעות סגורים , ידים מקביליות לקרקע.
מ - אצבע מורה ואמה של יד ימין פתוחים , אצבע מורה של יד שמאל צמודה לאצבע מורה של יד ימין נוצרת צורת N.
נ -אגודל ואצבע מורה ב90 מעלות האגודל מקביל לקרקע.
ס - זרת קמיצה ואמה פרוסות אגודל מורה מייצרים עיגול (סימן OK)
ע - אצבע מורה על העין
פ - אצבע מורה על הפה
צ - אצבע מורה על הצוואר
ק- אגודל ימין אצבע מורה מקופלים אצבע מורה של שמאל צמודה לאגודל (נוצרת צורת האות ק)
ר אגודל ימין מאונך לקרקע אמה פתוחה שאר האצבעות סגורות
ש- שלוש אצבעות פרוסות ליד ימין (כמו ב ג) ואצבע מורה של יד שמאל מתחת.
ת - סימן קליק באמצעות יד ימין

הפסקה / רווח ידיים שלובות.


פניתי למספר אנשים שמביניים בנושאי שפות והופנתי למסמך הבא (איות רשמי),ול סיינפדיה. מה שמעניין שאנשים שומעים מכירים את כללי האיות הזה אבל לא את הכללים הרשמים.

מצאתי איזכור לשפה ב fxp בקישור הבא. בתפוז גם מציגים את השפה. אבל בשום מקום אין את השם הרשמי.

יום חמישי, מאי 21, 2009

אוף עם הספאמרים האלה ..

מכירים את הנושא של מי שנכווה מחלב רותח נושף על מים קרים ?
שמעתי הרבה על ארגון מסויים ועל פועלו אז חשבתי בתור מתכנת Voip ואיש קוד פתוח אוכל להתנדב ולעזור להם.

למה להתנדב ? מהסיבה הפשוטה כי הם עושים משהוא טוב ולי יש יכולת לעזור ובנוסף לעשות זאת בקוד פתוח (ובכך גם לעזור לפרוייקטים שאני אוהב).
סיבה נוספת היא התחום הרחב שקשור לחלק גדול מהאכלוסיה בארץ והוא השואה.
מכיוון שעסקתי רבות בחקר השורשים של המשפחה שלי קיבלתי ניסיון באיתור המידע ואיחסונו.

לדוגמה עזרתי כבר לפחות לשני משפחות לאסוף קצוות על משפחתם (בן עם Geni ו gewishGen) כתבתי כבר קוד שמתממשק מול מספר בסיסי נתונים ומאפשר שליפה ואני מתלבט אם לשחרר API שיאפשר לGrams להתחבר למערכות של יד ושם ולפרוייקט של דניאל ק. (ממשק דומה למערכות יד ושם).

המכתב :

Subject: סוג של תרומה - פתרונות VOIP
לYYY שלום ,

שמי בוריס ואני מפתח תוכנה חופשית שלפעמים גם מתעסק בגניאולגיה.
ראיתי ושמעתי על פועלכם וז חשבתי כי אולי אוכל לעזור במשהוא :

במידה ואתם צריכים עזרה בהרמת סביבת VOIP (לדוגמה OpenSer ) או שאתם צריכים עזרה בהרמת GateWay לXXXX לשרת שקיים אצלכם (על מנת לחסוך שיחות טלפון למדינות כל אחרות בעולם) -
אשמח לעזור __ *ללא תשלום *__ (כמובן במגבלות מסויימות בהם לא אהיה
זמין) בעזרה בהקמת מערכות קוד פתוח.

כמו כן אני יכול לעזור בתחום הגנאולגיה (תחום התוכנה) - יצא לי כבר לחקור מקורות של אנשים ובניתי מספר מערכות בשביל לעזור (כולן תוכנות חופשיות) כמו כן אני יכול להדריך שימוש בתוכנות אלו.

דבר זה יוכל לעזור בארגון XYZ :
כיום מרבית המחקר הגנאולגי משתמש במערכות קנייניות (כמו דרורית ) כאשר שימוש בהם הוא מגביל ופעמים רבות מחייב תשלום כספי.

שימוש במערכות קוד פתוח דוגמת gramps מאפשר לכל אדם בביתו לבנות את המחקר (עם העדויות / תצלומים / ומקורות ) ובכך להקל את הבעייה.

נ.ב.
אינני יכול לעזור בחומרה.
התשובה על המכתב שלי היה :
קוראים לזה ספאם וזה לא חוקי אני מקווה שאתה לא מנסה להשיג כך לקוחות
יכולת להיות שהצעה שלי נשמעה כמו פרסומת אבל אני באמת ובתמים רציתי לעזור בשביל לפרוס מערכות ולעזור.
לעזעזל אם כל הפרסומאים הללו מגיע בן אדם ומציע שהוא יסביר ויגדיר איך להרים סביבת SER או אפילו יחבר את ה Asterisk שלהם לשרת OpenSer או יכתוב קוד (כמובן תחת רישיון GPL )

לאחר מכן דיברתי איתו והסברתי והוא אף רצה שניפגש (אני מקווה שזה יצא לפועל בשבוע הבא).
בכל מקרה התחלתי לתת פוש יותר חזק בתרגום של Gramps הבעיה היא שאין לי מושג איך הופכים את הGUI למיושר לימין זה נראה שאני חייב לשנות את הכל , אולי יש איזה שהוא מנגנון שאני צריך לשים בו ערך יישר לימין ?