LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1208|回复: 1

GTK 中文輸入亂碼, 請指教. 謝謝.

[复制链接]
发表于 2006-2-18 11:05:08 | 显示全部楼层 |阅读模式
各位好
小弟發現gtk在中文輸入及顯示時的問題. 請各位指教, 共同討論... 謝謝.

先是顯示問題, 用i18n gettext 方法.
環境是 Redhat, locale 是 zh_CN.GB2312 及 zh_TW.Big5 二個, gtk+ 2.0....
gtk程序內只有以下幾個widget

  1. GtkWidget *window;
  2. GtkWidget *vbox;
  3. GtkWidget *lable;
  4. GtkWidget *entry;
复制代码


在gtk程序內只設定 #define _(STRING) gettext(STRING) , 在程序啟動是會出現警告如下:

  1. ** (test:3444): WARNING **: Invalid UTF8 STRING passed to pango_layout_set_text();
  2. (test:3444): Gdk_WARNING **: Error converting from UTF-8 to 'BIG5': 轉換輸入資料時遇到不正確的位元組次序
复制代码

程序介面可以顯示, 但沒有任何字串顯示, 全時空白的... <-- 這個例子在網上找了很多, 好像只能在gtk 1.2 上運行
再改程序, 為每個字串加入 g_locale_to_utf8(STRING), -1, NULL, NULL, NULL). 把所有字串轉換成utf8, 再編譯, 再編寫翻譯檔, 正確了!! :mrgreen: 能正確顯示中文(繁體/簡體也可以了).

到了輸入中文問題,
在以上的程序再加入, 當 gtk_entry_get_text(GTK_ENTRY(entry)); 時, 在文本模式上顯示出來, 但發現所顯示的都是亂碼, 無論在繁體及簡體的情況下也是一樣. 但在gtk介面上顯示的中文都是正確的(繁體/簡體也是正確), 本人想應該是get_text時編碼出現錯誤, 所以出現亂碼, 現請各位談談及討論這中文輸入的問題... :cry::cry:



我會不斷更新若有新發現... 謝謝.
发表于 2006-2-18 15:55:45 | 显示全部楼层
gtk默认的编码就是utf-8,你用utf-8编码来保存你的源文件,再编译,就不用每个字串都用g_locale_to_utf8来转换。

输出乱码的问题,跟你的终端编码有关,比如在gb2312的终端上输出utf8的字串当然会乱码。g_print默认输出的应该是utf8编码的(没确认),试着修改你的终端编码为utf-8,或输出前先
g_utf8_to_locale??
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表