AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1531413
Accepted
einpoklum
einpoklum
Asked: 2020-03-10 04:44:59 +0800 CST2020-03-10 04:44:59 +0800 CST 2020-03-10 04:44:59 +0800 CST

Obtendo "Aviso: conjuntos de caracteres ausentes na conversão de String para FontSet"

  • 772

Estou usando aplicativos X em uma conexão SSH para alguma máquina. Quando executo um aplicativo X, digamos, xclockpara simplificar, recebo uma mensagem do console dizendo:

Warning: Missing charsets in String to FontSet conversion

... mas o aplicativo é executado. Minhas localidades são:

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Agora, encontrei esta sugestão antiga para apenas definir export LC_ALL=C. E - isso funciona, a mensagem de erro desaparece. No entanto, eu realmente não quero mudar minha localidade assim!

Existe algo que eu possa fazer para evitar o erro e manter minha localidade?

Informação adicional:

  • O servidor X é o servidor X integrado do MobaXterm no Windows.
  • máquina remota é SLES GNU/Linux 11 (por SUSE).
utf-8 locale
  • 1 1 respostas
  • 3965 Views

1 respostas

  • Voted
  1. Best Answer
    mr.spuratic
    2020-10-22T11:11:36+08:002020-10-22T11:11:36+08:00

    Você está correto, você não quer mudar sua localidade assim! Encontrei sugestões semelhantes e escolhi a toca do coelho.

    A única variável de localidade que você pode alterar é LC_CTYPE=C(essas são as configurações de classificação de caracteres , consulte a seção POSIX 7, Localidade para obter detalhes).

    O principal problema aqui, acredito, é que os antigos programas X têm problemas menores relacionados a fontes com sistemas contemporâneos multi-byte/multi-localidade.

    Minha própria localidade, em um desktop X Org (Mobaterm usa X Org sob o capô) é en_IE.utf(mapeado para o arquivo en_US.UTF-8/XLC_LOCALEvia /usr/share/X11/locale/locale.dir). Dentro desse arquivo XLC_LOCALE existem definições de conjunto de fontes e conjuntos de caracteres , e é a presença de alguns deles que (tendem a) acionar os avisos (especificamente para codificações cirílicas e asiáticas que eu não uso e não têm grande cobertura de fonte de ).

    Eu recebo vários erros de alguns programas, por exemplo xfig:

    Warning: Missing charsets in String to FontSet conversion
    Warning: Missing charsets in String to FontSet conversion
    Warning: Unable to load any usable fontset
    

    fsNComentar várias entradas indesejadas csNcorrigirá isso (cada índice N define um par fontset/charset correspondente, mantenha esse emparelhamento observando que cada par tem aproximadamente 200 linhas de diferença). Isso pode afetar a apresentação de certos textos. Ou definir LC_CTYPE=Cantes de iniciar xfigremove todos os avisos.

    Os avisos são emitidos de XtCvtStringToFontSet()(libXt), como resultado do XCreateFontSet()relatório de conjuntos de caracteres ausentes (ou seja, conjuntos de caracteres usados/exigidos pela localidade, mas não encontrados na(s) fonte(s) correspondente(s) à especificação solicitada).

    XCreateFontSet()retorna a lista de conjuntos de caracteres ausentes, mas libXt não fornece detalhes da solicitação ou conjuntos de caracteres ausentes para ajudá-lo a localizá-los. (Eu trapaceei usando LD_PRELOADe um invólucro .sopara XCreateFontSet()encontrar os culpados, veja abaixo.)

    O verdadeiro problema então é que um fontspec (por exemplo "- -helvetica-medium-r-normal--16- - - - - - - ") é verificado para todas as codificações definidas no arquivo XLC_LOCALEe, se algumas não puderem ser encontrado, então você verá esses avisos. Se nenhum for encontrado, você verá "Aviso: não é possível carregar nenhum conjunto de fontes utilizável" também.

    Algumas correções então:

    1. set LC_CTYPE=C(ou outra codificação "simples", por exemplo en_US) para programas errantes
    2. remova pares indesejados de fontset/charset do arquivo XLC_LOCALE em vigor (localidade), isso entra em vigor sem reiniciar o X ou sua área de trabalho
    3. instale mais fontes e codificações (uma espécie de jogo de whack-a-mole)
    4. definir um fontspec de aplicativo mais generoso (via xrdb ou linha de comando)
    5. definir um fontspec padrão mais generoso (via xrdb)

    Você pode precisar das duas correções finais, pois o aviso pode ser emitido se qualquer uma das fontes padrão não corresponder a uma codificação no momento da verificação, mesmo que uma fonte subsequente seja suficiente.

    Um problema final é que alguns fontspecs de fallback podem continuar a acionar o problema. Especificamente, o padrão Xt codificado de:

    -*-*-*-R-*-*-*-120-*-*-*-*,*
    

    pode falhar completamente acionando os mesmos avisos. Alguns testes rápidos indicam que fontspecs que não contêm uma família (incluindo apenas um único "*") podem não corresponder a nada, mesmo que sejam esperadas correspondências, ou seja, com:

    xlsfonts -fn "*-*-*-R-*-*-*-120-*-*-*-*"
    

    E adicionar um ", *" à direita como um curinga completo pode quebrar uma especificação de fonte que funcionaria de outra forma. Observado no X Org 1.18.3.

    Eu uso isso no meu .Xdefaults:

    XtDefaultFontSet: -*-fixed-medium-r-normal--16-*-*-*-*-*-*-*,-*-fixed-*-*-*--16-*,-*-*-medium-*-*--16-*
    

    o que parece manter a maioria das coisas silenciosas para mim, sem necessidade de XLC_LOCALEalterações. Esse fallback consegue corresponder a todas as codificações solicitadas na mistura de fontes que de alguma forma acretei ...


    Aqui está o wrapper muito simples (com verificação mínima de erros) que usei para ajudar a rastrear o que está sendo solicitado (já que geralmente é definido apenas na fonte do aplicativo) e o que não está sendo encontrado. Testado em x86_64 Slackware, outras distros/sistemas podem precisar de pequenos ajustes.

    gcc -fPIC -shared -Wl,-soname,xfontset.so -ldl -o xfontset.so xfontset.c
    

    então

    LD_PRELOAD=$PWD/xfontset.so xfig
    

    para executá-lo a partir do diretório em que você o compilou.

    #define _GNU_SOURCE
    #include <stdio.h>
    #include <dlfcn.h>
    #include <link.h>
    #include <unistd.h>
    #include <string.h>
    #include <stdlib.h>
    
    #include <X11/Xlib.h>
    
    #define DEBUG 1
    #define dfprintf(fmt, ...) \
        do { if (DEBUG) fprintf(stderr, "[%14s#%04d:%8s()] " fmt, \
              __FILE__, __LINE__, __func__,##__VA_ARGS__); } while (0)
    
    // gcc -fPIC -shared -Wl,-soname,xfontset.so -ldl -o xfontset.so xfontset.c
    
    // see X11/Xlib.h
    typedef XFontSet XCreateFontSet_fp(
      Display *display,
      _Xconst char *base_font_name_list, 
      char ***missing_charset_list_return, 
      int *missing_charset_count_return, 
      char **def_string_return
    );
    
    static XCreateFontSet_fp *real_XCreateFontSet;
    
    void myinit(void) __attribute__((constructor));
    
    void myinit(void)
    {
        void *dl;
        if ((dl=dlopen(NULL,RTLD_NOW))) {
            dfprintf("found dl at %p ()\n", dl);
    
            real_XCreateFontSet=dlsym(RTLD_NEXT,"XCreateFontSet");
            if (!real_XCreateFontSet) dfprintf("error: %s\n",dlerror());
            dfprintf("found fn() at %p\n", (void *)real_XCreateFontSet);
        } else {
            dfprintf("dlopen() failed...\n");
        }
    }
    
    // https://www.debian.org/doc/manuals/intro-i18n/ch-examples.en.html
    // https://invisible-island.net/xterm/xtoolkit/intrinsics.html
    
    XFontSet XCreateFontSet(Display *display, _Xconst char *base_font_name_list, char ***missing_charset_list_return, int *missing_charset_count_return, char **def_string_return)
    {
         XFontSet rc;
         int fnum,ii;
         XFontStruct **xfonts;
         char **font_names;
    
         dfprintf("wrapped XCreateFontSet()\n");
         dfprintf(" base_font_name_list: <%s>\n",base_font_name_list);
    
         rc=real_XCreateFontSet(display, base_font_name_list, missing_charset_list_return,missing_charset_count_return, def_string_return);
    
        if (*missing_charset_count_return) {
            int ii=0;
            dfprintf(" #missing charsets: %i\n",*missing_charset_count_return);
    
            for (ii=0; ii<*missing_charset_count_return; ii++) {
                dfprintf(" %2i: <%s>\n",ii, (*missing_charset_list_return)[ii]);
            }
        }
        if (rc) {
            fnum=XFontsOfFontSet(rc,&xfonts,&font_names);
            for (ii=0; ii<fnum; ii++) {
                dfprintf(" XFontSet[%2i]=<%s>\n",ii,font_names[ii]);  
            }
        } else {
            dfprintf("no FontSet found...\n");
        }
        return rc;
    }
    
    • 3

relate perguntas

  • Quais são esses símbolos desconhecidos que aparecem no meu HTML ao usar o Bloco de Notas?

  • Clientes FTP populares falharam ao detectar automaticamente que o VSFTPD atende a nomes de arquivos UTF-8

  • Use o Microsoft Word para salvar um arquivo UTF-8 sem o BOM

  • É possível criar um código QR usando texto?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 Por que uma conexão de Internet gigabit/s via cabo (coaxial) não oferece velocidades simétricas como fibra? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    fixer1234 O "HTTPS Everywhere" ainda é relevante? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve