Windows의 Visual Studio에서 .txt 파일을 편집하여 HPC 서버에 복사했습니다. 처음에는 파일이 괜찮아 보였지만
그런데 리눅스 환경에서 열면 이상한 문자가 나타납니다(실제로는 묻습니다 "sampleID.txt" may be a binary file. See it anyway?
). 문자 인코딩에 문제가 있다고 생각하지만 Visual Studio에서 이 파일을 저장하려고 하면 "이 파일의 일부 유니코드 문자를 현재 코드 페이지에 저장할 수 없습니다."라는 메시지가 표시되기 때문에 이 문제의 원인이 무엇인지 모르겠습니다. 데이터를 유지하기 위해 이 파일을 유니코드로 다시 저장하시겠습니까? ". 누구든지 이 파일을 쉽게 수정할 수 있는 방법이 있나요? 감사합니다!
답변1
처음 3바이트는 잘못 사용된 바이트 순서 표시이며, utf-8로 변환됩니다. UTF-8은 바이트 순서 표시를 사용하면 안 됩니다.
나머지 3개의 반복되는 문자는 a −
(a 아님 -
)입니다.
이는 Debian Gnu/Linux에서 터미널, emacs 등을 통해 잘 표시됩니다.
작업량을 줄이려면 로케일을 올바르게 설정해야 할 수도 있습니다.
예를 들어 영국 영어의 경우(미국의 경우 GB를 US로 변경) 다른 언어의 경우 utf8이 포함되어 있는지 확인하세요. 이제 모든 현지 언어에 대해 utf-8을 사용해야 하며 다른 인코딩은 더 이상 사용되지 않으며 서로 호환되지 않습니다. .
LANG=en_GB.utf8
LANGUAGE=en_GB
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME=en_GB.utf8
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8"
LC_MEASUREMENT="en_GB.utf8"
LC_IDENTIFICATION="en_GB.utf8"
LC_ALL=
답변2
다음 방법을 통해 UTF-8 인코딩을 사용하는 시스템에서 파일을 재현할 수 있습니다.
{ printf '\xef\xbb\xbf';
for i in {3..6}; do
printf '%s\r\n' ped1_D$((2*(i-2)+2))_{1..3}_g$i−b1−{s,i}1;
done;
} >file
그렇다면 예, less
인코딩이 UTF-8이 아닌 경우 명령은 파일이 바이너리인지 묻고 다음을 사용하여 재생할 수 있습니다.
LC_ALL=C less file
예, 많은 특수 문자가 표시됩니다.
그러나 이는 LESS에서만 발생하며 대부분의 다른 편집기(nano, vi, emacs)는 DOS 인코딩에 의해 잘못 안내되지 않고 파일을 열 수 있습니다.
줄 끝의 캐리지 리턴(\r)을 제거하는 가장 쉬운 방법그리고원하지 않는 BOM(Byte Order Mark) 자동 제거는 dos2unix를 사용하여 수행됩니다. UTF-8은 바이트 재정렬이 필요하지 않은 바이트 중심 형식이며 모든 바이트는 네트워크 순서로 작동합니다. BOM은 16비트 또는 32비트 문자 인코딩에만 유용합니다.
dos2unix file
그러나 시스템의 실제 문제는 utf-8 기본 인코딩을 사용하지 않는다는 것입니다. 이제 대부분의 운영 체제는 기본적으로 UTF-8을 사용합니다. 다음과 같이:
LC_ALL=en_US.UTF-8 less file
locale
인쇄 이름에 utf-8 인코딩이 포함되어 있는지 확인하고 , 필요한 경우 콘솔이 utf-8 인코딩 stty -a
을 사용하는지 확인하세요 -iutf8
.