July 4,2007
Scilab 中之 BIG5 , UTF8 中文
中文碼在 VTE, TCL, GTK , Scilab 中流竄轉換, 似乎使用 UTF8 碼, 程式開發較容易,但 BIG5 使用者太多, 無法放棄.
目前只剩下一部分內部之 BIG5-> UTF8 未加入應該是在 pango_draw_text 中檢查字串判斷是否為 UTF8 如果不是, 則將他轉碼 (也許由 lang 環境參數決定如何轉碼) (2007/07/03)
可能參考
Character Set Conversion
gboolean is_utf8 g_get_charset (G_CONST_RETURN char **charset);
charset : return location for character set name
Returns : TRUE if the returned charset is UTF-8
if(! g_get_charset (&charset) g_locale_to_utf8(string)
http://203.64.187.41/gtk/GTK-Lesson-4.html
#define BIG5(s) g_locale_to_utf8(s, strlen(s),NULL, NULL, NULL)
以 g_utf8_validate() 檢查是否為 UTF8 有效字串 ( Text Handling in GTK+ 2.0)
目前只剩下一部分內部之 BIG5-> UTF8 未加入應該是在 pango_draw_text 中檢查字串判斷是否為 UTF8 如果不是, 則將他轉碼 (也許由 lang 環境參數決定如何轉碼) (2007/07/03)
可能參考
Character Set Conversion
gboolean is_utf8 g_get_charset (G_CONST_RETURN char **charset);
charset : return location for character set name
Returns : TRUE if the returned charset is UTF-8
if(! g_get_charset (&charset) g_locale_to_utf8(string)
http://203.64.187.41/gtk/GTK-Lesson-4.html
#define BIG5(s) g_locale_to_utf8(s, strlen(s),NULL, NULL, NULL)
以 g_utf8_validate() 檢查是否為 UTF8 有效字串 ( Text Handling in GTK+ 2.0)
若 locale 為 big5 , Scilab 字串絡透過 TCL/TK 傳到繪圖指令時已轉為 utf8
, 但若直接以 Scilab 指令傳送之字串, 則保持為 big5 encoding, 因此 pango_layout_set_text 函數內之字串必須轉為 utf8
void pango_draw_text(BCG *ScilabXgc,GdkDrawable *drawable,int xx, int yy,char *string)
{
PangoLayout *pl;
const gchar *charset;
pl = gtk_widget_create_pango_layout(ScilabXgc->drawing,NULL);
pango_layout_context_changed(pl);
if(!g_utf8_validate(string,-1,NULL) ) { // 檢查是否為 utf8
pango_layout_set_text(pl, g_locale_to_utf8(string, strlen(string),NULL, NULL, NULL),-1);
} else {
pango_layout_set_text(pl, string,-1); // 若已是 utf8 字串, 直接呼叫
}
GdkGC *gc = gdk_gc_new(drawable);
gdk_draw_layout( drawable,gc,xx,yy,pl);
g_object_unref(gc); g_object_unref(pl);
}
引用URL
http://cgi.blog.roodo.com/trackback/3573949