2016-09-21 111 views
0

我想用XDrawString()顯示西里爾符號,但在屏幕上它們顯示爲錯誤的編碼。XDrawString不正確的編碼

我已經在我的系統(ubuntu 14.04)中安裝了xfonts-cyrillic,但仍然從xlsfonts列表中顯示錯誤的結果。

我的代碼(main.cpp中):

#include <X11/Xlib.h> 
#include <string.h> 

int main(int, char**) 
{ 
    Display *d = XOpenDisplay(0); 
    Window r = DefaultRootWindow(d); 
    Window w = XCreateSimpleWindow(d, r, 0, 0, 256, 256, 0, 0, 0xffffff); 
    GC gc = DefaultGC(d, 0); 

    XMapRaised(d, w); 
    XSelectInput(d, w, ExposureMask); 

    Font font = XLoadFont(d, "9x15-cyrillic"); 
    XSetFont(d, gc, font); 

    const char *msg = "тут текст"; // cyrillic symbols 

    while (1) 
    { 
     XEvent e; 
     XNextEvent(d, &e); 
     XDrawString(d, w, gc, 16, 16, msg, (int) strlen(msg)); 
    } 
} 

編譯:

g++ -Wall -g -std=c++11 main.cpp -L/usr/lib/X11 -lX11 -o output 

我的結果是:

enter image description here

爲什麼在結果窗口中的文字是錯誤的編碼?我錯過了什麼?

回答

4

X11早在幾千年前(在互聯網年)就已經出現了Uicode。你的程序可能使用UTF-8,默認情況下X11不會。試試Xutf8DrawString。

或者,找出哪些編碼字體使用(xlsfonts會告訴你,因爲編碼是XLFD的一部分,但看起來像KOI8-R),並使用該字符串編碼。

應該指出的是,真正的程序現在很少使用服務器端的字體。有關更多信息,請參閱this