Por que caracteres não-ASCII são exibidos usando um ponto de interrogação?

4

Estou trabalhando em uma distribuição Linux incorporada baseada no Yocto Morty.

Eu usei uma distribuição do Ubuntu para criar os dois arquivos a seguir:

  • fòò.dàt
  • bàr.dàt

Eu armazenei os arquivos em um pendrive e conectei o pendrive ao meu sistema embarcado.

Eu usei o PuTTY para conectar via serial ao sistema embarcado e navegar pelo conteúdo do pendrive. Os arquivos estão listados como segue:

root@imx6qsabresd:/media/linux_desktop# ls -la
total 8
drwxr-xr-x 2 root root 4096 Mar 17  2017 .
drwxr-xr-x 9 root root 4096 Jan  1  1970 ..
-rwxr-xr-x 1 root root    0 Mar 17  2017 b?r.d?t
-rwxr-xr-x 1 root root    0 Mar 17  2017 f??.d?t

A localidade da distribuição do Ubuntu é:

user@user-VirtualBox:~$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=it_IT.UTF-8
LC_TIME=it_IT.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=it_IT.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=it_IT.UTF-8
LC_NAME=it_IT.UTF-8
LC_ADDRESS=it_IT.UTF-8
LC_TELEPHONE=it_IT.UTF-8
LC_MEASUREMENT=it_IT.UTF-8
LC_IDENTIFICATION=it_IT.UTF-8
LC_ALL=

A localidade da distribuição incorporada é:

root@imx6qsabresd:/media/linux_desktop# locale
LANG=en_US
LC_CTYPE="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_COLLATE="en_US"
LC_MONETARY="en_US"
LC_MESSAGES="en_US"
LC_PAPER="en_US"
LC_NAME="en_US"
LC_ADDRESS="en_US"
LC_TELEPHONE="en_US"
LC_MEASUREMENT="en_US"
LC_IDENTIFICATION="en_US"
LC_ALL=en_US

mesmo que o sufixo .UTF-8 não seja explicito, presumo que a localidade do sistema incorporada seja UTF-8 porque:

root@imx6qsabresd:/media/linux_desktop# locale charmap
UTF-8

veja aqui: link para mais detalhes.

Abaixo da lista de locales que eu instalei atualmente em minha distribuição incorporada:

root@imx6qsabresd:/media/linux_desktop# locale -a
C
de_DE
en_GB
en_GB.ISO-8859-1
en_US
en_US.ISO-8859-1
fr_FR
POSIX
zh_CN

O emulador de terminal PuTTY é configurado para usar o UTF-8 como conjunto de caracteres remoto.

Por que os caracteres acentuados são substituídos por pontos de interrogação?

    
por Grynium 17.03.2017 / 16:49

1 resposta

0

O problema foi causado pela montagem do pendrive. Eu costumo montar o dispositivo sem especificar qualquer opção. Por exemplo,

mount /dev/sdb1 /media

O resultado é:

/dev/sdb1 on /media type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)

Como descrito aqui: link , a opção padrão iocharset é: iso8859-1.

Eu tentei montar o pendrive especificando a opção iocharset = utf8 e isso resolveu o problema:

mount -o iocharset=utf8 /dev/sdb1 /media

Veja os seguintes caracteres UTF-8 exibidos corretamente no console:

root@imx6qsabresd:/media/win/mix# ls -la
total 28
drwxr-xr-x 7 root root 4096 Mar 13 15:19 .
drwxr-xr-x 9 root root 4096 Mar 16  2017 ..
drwxr-xr-x 2 root root 4096 Mar 13 15:13 Île-de-France
-rwxr-xr-x 1 root root    0 Mar 13 15:13 Île-de-France.txt
drwxr-xr-x 2 root root 4096 Mar 13 15:14 madrileños
-rwxr-xr-x 1 root root    0 Mar 13 15:15 madrileños.txt
drwxr-xr-x 2 root root 4096 Mar 13 14:58 mà_però
-rwxr-xr-x 1 root root    0 Mar 13 14:57 mà_però.txt
drwxr-xr-x 2 root root 4096 Mar 13 15:12 Märkisch-Oderland
-rwxr-xr-x 1 root root    0 Mar 13 15:13 Märkisch-Oderland.txt
drwxr-xr-x 2 root root 4096 Mar 13 15:08 أبو ظبي
-rwxr-xr-x 1 root root    0 Mar 13 15:09 أبو ظبي.txt
    
por 20.03.2017 / 10:22