Hi,All
I am porting Tiny-X to XScale platform, When I want to display chinese, I meet some problem. The following is my porting procedure. I compile locale data using localedef(arm), put the locale data to /usr/lib/locale/zh_CN I put gconv.modules ,EUC-CN.so , libGB.so to /usr/lib/gconv I edit locale.dir and locale.alias , add zh_CN.GB2312 support to these files I put chinese font to /usr/X11R6/lib/X11/fonts/misc, and edit fonts.dir , fonts.alias I export LC_ALL variable to zh_CN.GB2312 , Library I use is: glibc-2.2.3.so XFree86-4.20 BUT it can not display chinese, following is my test program setlocale(LC_ALL,"") is OK XSupportsLocale() is OK XSetLocaleModifiers(NULL) is OK num = mbstowcs(wcstr,string,strlen(string)) is OK XCreateFontSet(...) is OK XmbDrawString(display,win,fontset,gc,50,100,string,strlen(string)); //display error text(english is right, chinese is wrong) XwcDrawString(display,win,fontset,gc,50,140,(wchar_t *)wcstr,num); //display error text(english is right, chinese is wrong) I wonder if XServer is wrong. Does Xserver need to set some options about locale when It is compiled. I wonder if xfs must run . I am not sure whether It is locale problem or font problem. Please help me to analyse this problem , What problem I could meet? Thank you very much. following is my test program /* File: i18n-output.c */ #include <X11/Xlib.h> #include <X11/Xutil.h> #include <X11/Xos.h> #include <X11/Xatom.h> #include <stdio.h> #include <locale.h> int main(int argc, char **argv) { char *string = "这是中文和English的混和字符串!"; //chinese & english compound string Display *display; int screen_num; Window win; unsigned int width, height; unsigned int border_width= 4; unsigned int display_width, display_height; int count; XEvent report; GC gc; unsigned long valuemask = 0; XGCValues values; char *display_name = NULL; // XFontSet fontset; char **missing_charsets; int num_missing_charsets; char *default_string; wchar_t wcstr[80]; // int num; // if((setlocale(LC_ALL, "")) == NULL) { printf("cannot set locale\n"); return 1; exit(1); } // if(!XSupportsLocale()) { printf("X does not support current locale\n"); exit(1); } //设置locale修饰 if(XSetLocaleModifiers(NULL)) { printf("Cannot set locale modifiers\n"); exit(1); } // if ((display=XOpenDisplay(display_name)) == NULL ) { printf("Cannot connect to X server %s\n", XDisplayName(display_name)); exit(-1); } // screen_num = DefaultScreen(display); // display_width = DisplayWidth(display, screen_num); display_height = DisplayHeight(display, screen_num); // width = display_width/3; height = display_height/4; // win = XCreateSimpleWindow(display, //display RootWindow(display,screen_num),//父窗口 0, 0, width, height, //位置和大小 border_width, //边界宽度 BlackPixel(display,screen_num), //前景色 WhitePixel(display,screen_num));//背景色 //选择窗口感兴趣的事件掩码 XSelectInput(display, win, ExposureMask | KeyPressMask | ButtonPressMask | StructureNotifyMask); //建立GC gc = XCreateGC(display, win, valuemask,&values); //建立字体集 fontset = XCreateFontSet(display, //"8x16,-misc-SimSun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0" "8x16,-isas-fangsong ti-medium-r-normal--0-0-72-72-c-0-gb2312.1980-0", //"8x16,-*-song-medium-r-normal--16-*-*-*-*-*-gb2312.1980-0", &missing_charsets, &num_missing_charsets, &default_string); if(num_missing_charsets > 0) { int i; printf("Following charsets are missing:\n"); for(i=0; i<num_missing_charsets; i++) { printf("Missing %d: %s\n",i,missing_charsets[i]); } printf("\ndefault string:%s\n",default_string); //XFreeSringList(missing_charsets); } num = mbstowcs(wcstr,string,strlen(string)); XMapWindow(display,win); while(1) { XNextEvent(display,&report); switch (report.type) { case Expose: if(report.xexpose.count != 0) break; XmbDrawString(display,win,fontset,gc,50,100,string,strlen(string)); XwcDrawString(display,win,fontset,gc,50,140,(wchar_t *)wcstr,num); break; case ButtonPress: case KeyPress: XFreeFontSet(display,fontset); XFreeGC(display,gc); exit(1); default: break; } } } licz _______________________________________________ I18n mailing list [EMAIL PROTECTED] http://XFree86.Org/mailman/listinfo/i18n