저는 Linux 전문가는 아니지만 Linux Buildroot에서 실행되는 소프트웨어 개발을 따르고 있습니다. 장치는 그래픽 인터페이스 프로그램을 사용하거나 셸에 액세스하거나 직렬 케이블 또는 SSH를 통해서만 연결할 수 있습니다. 장치의 최종 사용자는 Wi-Fi 네트워크에 연결하도록 선택할 수 있습니다.
이 프로그램은 C++로 작성되었으며 스캔을 수행하고 사용 가능한 Wi-Fi 네트워크 목록을 얻으려면 셸 명령을 실행해야 합니다.
내 문제는 이 작업 결과의 인코딩에 있습니다. 악센트 부호가 있는 문자를 올바르게 표시할 수 없습니다.
프로그램 내에서 악센트가 있는 단어를 입력하고 문제 없이 화면에 표시되도록 할 수 있습니다. 그러나 Wi-Fi 네트워크를 얻기 위해 쉘 명령에서 결과를 검색하면 "잘못된" ESSID를 얻습니다. 네트워크 이름에 문자가 포함되어 있으면 문자가 è
로 인코딩되어 \xC3\xA8
연결할 수 없기 때문입니다. 회로망.
명령 출력을 인코딩하는 방법을 사용해 보았지만 작동하지 않습니다. 또한 코드에서 실행한 명령을 셸에서 직접 실행했는데 결과가 위의 예와 같이 잘못 인코딩되었습니다. 저는 이것이 시스템 문제라고 추론하고 시스템 인코딩을 수동으로 설정해 보았지만 아무것도 바뀌지 않았습니다.
제가 사용하고 있는 시스템에서 일부 파일이 누락된 것을 발견했습니다. 이 문제에 대한 해결책이 있습니까? ?
답변1
이 16진수 코드 쌍 0xC3
0xA8
은è
UTF-8코딩. 나는 당신이 사용하고 있다고 의심합니다ISO-8859-10xA8
동일한 문자가 나타날 것으로 예상되는 프로그램(또는 ISO-8859-15와 같은 유사한 변형)의 인코딩입니다 .
UTF8 문자를 처리하도록 프로그램을 조정하거나 Linux 기반 시스템에 UTF8 대신 ISO8850-1 인코딩을 사용하도록 지시해야 합니다.
Linux 기반 시스템에서 이 명령을 실행하여 기본적으로 사용하도록 구성된 인코딩을 확인하세요.
locale
내 시스템에서는 영국(GB) 영어 스타일 UTF-8을 사용하고 있다고 보고합니다.
LANG=en_GB.UTF-8
LANGUAGE=en_GB:en
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
내 특정 계정의 경우 이 로케일도 사용하고 있음을 확인할 수 있으며 env | grep -E 'LC_|LANG'
다음과 같은 출력이 생성됩니다.
LANGUAGE=en_GB:en
LANG=en_GB.UTF-8
Debian 기반 시스템에서는 를 사용할 수 있습니다 dpkg-reconfigure locales
. 이 명령을 사용하면 사용 가능한 추가 로케일을 정의할 수도 있습니다.