.txt 파일에서 이상한 문자를 수정하는 방법은 무엇입니까?

.txt 파일에서 이상한 문자를 수정하는 방법은 무엇입니까?

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.

관련 정보