2016-09-21 13 views
0

キリル文字のシンボルをXDrawString()で表示したいのですが、画面上に間違ったエンコーディングで表示されます。XDrawStringのエンコーディングが正しくありません

xfonts-cyrillicを私のシステム(ubuntu 14.04)にインストールしましたが、まだ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を試してください。

また、エンコーディングがXLFDの一部であるが、KOI8-Rのように見えるので、あなたのフォントがどのエンコーディングを使用しているかを把握し、そのエンコーディングを文字列に使用してください。

実際のプログラムでは、サーバ側のフォントを使用することはめったにありません。詳細は、thisを参照してください。

関連する問題