ASCII가 아닌 문자가 물음표와 함께 표시되는 이유는 무엇입니까?

ASCII가 아닌 문자가 물음표와 함께 표시되는 이유는 무엇입니까?

저는 Yocto Morty를 기반으로 임베디드 Linux 배포판을 개발 중입니다.

Ubuntu 배포판을 사용하여 다음 두 파일을 만들었습니다.

  • 바 다트

파일을 펜 드라이브에 저장하고 펜 드라이브를 임베디드 시스템에 연결했습니다.

저는 PuTTY를 사용하여 직렬 포트를 통해 임베디드 시스템에 연결하고 펜 드라이브의 내용을 탐색하고 있습니다. 파일 목록은 다음과 같습니다.

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

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=

포함된 배포판의 로케일 설정은 다음과 같습니다.

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

.UTF-8 접미사가 명시적으로 표시되지 않더라도 다음과 같은 이유로 임베디드 시스템 로케일이 UTF-8이라고 가정합니다.

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

이봐:https://stackoverflow.com/a/42797421/5321161더 알아보기.

다음은 현재 임베디드 배포판에 설치한 로케일 목록입니다.

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

PuTTY 터미널 에뮬레이터는 UTF-8을 원격 문자 세트로 사용하도록 구성됩니다.

악센트 부호가 있는 문자가 물음표로 바뀌는 이유는 무엇입니까?

답변1

문제는 펜 드라이브 설치로 인해 발생합니다. 저는 보통 옵션을 지정하지 않고 장치를 설치합니다. 예를 들어

mount /dev/sdb1 /media

결과 :

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

여기에 설명된 대로:https://linux.die.net/man/8/mount기본 iocharset 옵션은 iso8859-1입니다.

iocharset=utf8 옵션을 지정하여 pendrive 설치를 시도했는데 문제가 해결되었습니다.

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

다음 UTF-8 문자가 콘솔에 올바르게 표시되는지 확인하십시오.

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

관련 정보