如何处理X11库中的复合文本编码?

问题描述 投票:0回答:1

我使用

"WM_NAME"
window 属性在 Xlib 中获取窗口标题,并且我发现该属性返回不同的字符串类型。对于字符串类型,有
"UTF8_STRING"
原子、
XA_STRING
(ISO-8859-1),以及一些
"COMPOUND_TEXT"
原子。虽然
"UTF8_STRING"
XA_STRING
看起来使用起来很简单,但我发现
"COMPOUND_TEXT"
使用起来有点复杂。

这是我在网上找到的唯一信息:https://www.x.org/releases/X11R7.7-RC1/doc/xorg-docs/ctext/ctext.html

最终目标是解析复合文本或至少将其转换为有效的 UTF-8 字符串。

c++ x11 xlib
1个回答
0
投票

可以通过XGetTextProperty获取wm名称,然后获取编码。这样做:

char *get_wm_name(Window win, Atom atom)
{
    int n;
    char **list=NULL, *result=NULL;
    XTextProperty name;

    if(!XGetTextProperty(display, win, &name, atom))
        return NULL;

    if(name.encoding == XA_STRING)
        //((char *)name.value) is wm name;
    else if(name.encoding == UTF8_STRING))
        Xutf8TextPropertyToTextList(xinfo.display, &name, &list, &n);
        //(*list) is wm name
    else // use iconv() or other API to get wm name
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.