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)


 若 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);
}


Posted by yunglee at 樂多Roodo! │00:33 │回應(0)引用(0)中文 Scilab 開發
樂多分類:日記/一般 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/3573949