Windows에서 파일을 만들었 습니다 DE_CopyOldToNew.sh
. 그런 다음 WinSCP를 사용하여 파일을 Linux에 업로드합니다. 이 파일에는 파일을 새 폴더에 복사하고 새 파일 이름을 할당하는 여러 cp 명령이 포함되어 있습니다. 이 명령에는 움라우트가 포함된 명령이 포함되어 있습니다(예 Gewährleistungsbürgschaft
: a를 실행하면 cat DE_CopyOldToNew.sh
움라우트가 "깨진" 방식으로 표시됩니다 Gew▒hrleistungsb▒rgschaft
. 예를 들어 a를 실행하면 view DE_CopyOldToNew.sh
움라우트가 원래대로 표시됩니다. 예를 Gewährleistungsbürgschaft
들어 . 스크립트를 실행하면 오류 가 발생 cp: cannot stat
하고 폴더와 파일의 움라우트가 로 표시됩니다 Gew\344hrleistungsb\374rgschaft
. Windows에서 스크립트 내용을 복사하여 Linux에 붙여넣으면 실행할 수 있습니다. 새 파일에 넣을 때 문제가 없는 새 스크립트. 업로드된 버전이 "손상"(더 나은 단어가 없어서)되는 원인은 무엇입니까?binary
text
dos2unix DE_CopyOldToNew.sh
답변1
파일은 ISO-8859 인코딩(아마도 Windows CP1252 또는 ISO-8859-15) 중 하나로 작성되었으며 Linux 기반 시스템은 UTF-8 인코딩을 예상하도록 설정되어 있습니다.
이를 쉽게 확인할 수 있습니다.
# Original text
printf 'Gew\344hrleistungsb\374rgschaft\n'
Gew�hrleistungsb�rgschaft
# What character set
printf 'Gew\344hrleistungsb\374rgschaft\n' | file -
/dev/stdin: ISO-8859 text
# Transcoded text
printf 'Gew\344hrleistungsb\374rgschaft\n' | iconv -f iso-8859-15 -t utf-8
Gewährleistungsbürgschaft
# What character set
printf 'Gew\344hrleistungsb\374rgschaft\n' | iconv -f iso-8859-15 -t utf-8 | file -
/dev/stdin: UTF-8 Unicode text
해결책?
소스 시스템에서 파일을 UTF-8로 생성합니다(Windows 애플리케이션은 이 문자 집합을 지원합니다).
Linux 기반 시스템을 다시 ISO-8859로 다운그레이드합니다. 권장되지 않음(그러나 가능함)
전송 후 파일 변환:
iconv -f iso-8859-15 -t utf-8 DE_CopyOldToNew.sh >DE_CopyOldToNew.sh.tmp && mv -f DE_CopyOldToNew.sh.tmp DE_CopyOldToNew.sh