고객으로부터 받은 일부 파일은 US-ASCII로 선언되었지만 유효하지 않은 문자를 포함하고 있기 때문에 올바르게 처리할 수 없습니다. 소프트웨어 수정 사항을 확인하기 위해 원본 파일의 몇 줄을 새 파일에 복사해 보았습니다. 원본 파일은 매우 커서 몇 줄만 필요합니다.
원래 줄은 gedit 에서 다음과 같습니다 003002002002\D4M
. \D4
빨간색으로 잘못된 문자에 대한 경고가 표시됩니다. 콘솔에서 원래 줄은 다음과 같습니다.003002002002�M
헤드와 테일을 통해 파일 파이핑을 시도했지만 결과 파일에 잘못된 문자 대신 "고정" 문자가 포함되어 있습니다.
head -n 449025 invalid.txt | tail > invalid_short.txt
생성된 파일을 캡처하면 다음과 같은 줄이 표시됩니다. 003002002002�M
그러나 생성된 파일을 gedit로 열면 다음과 같습니다. 003002002002ÔM
그리고 잘못된 문자가 없습니다.
gedit에서 줄을 선택하고 새 파일로 저장하려고 시도했지만 원래 문자가 아닌 유효하지 않은 문자만 표시됩니다. cat 및 gedit를 사용하면 다음과 같습니다(잘못된 문자 경고 없음, 빨간색 없음).003002002002\D4M
간단한 내용이 누락된 것 같지만 무엇인지 모르겠습니다.
감사해요
우분투 16.04, zsh
답변1
head
아니면tail
고정시키다/변화수치.
아마도 무슨 일이 일어나고 있는지는 gedit
처음 몇 바이트를 기반으로 파일의 인코딩을 추측하려고 한다는 것입니다. 0xD4가 파일에서 멀리 떨어져 있으면 gedit
파일이 ASCII 또는 UTF-8 형식이라고 추측하고 0xD4 바이트가 ASCII 또는 UTF-8 형식에서 유효하지 않은 것으로 발견되면 불평합니다.
두 번째 짧은 파일의 경우 0xD4가 파일 시작 부분에 가까우므로 gedit
추측된 문자 집합은 일부 8비트 문자 집합입니다(아마도 iso8859-1, 여기서 0xD4는 Ô).
그래서 귀하의 :
head -n 449025 invalid.txt | tail > invalid_short.txt
방법이 정확합니다. 두 파일 모두에서 실행 하면 두 경우 모두 .with : sed -n l
와 같은 내용이 표시됩니다 .003002002002\324M
hd
30 30 33 30 30 32 30 30 32 30 30 32 d4 4d |003002002002.M|