cat 및 WinSCP를 사용하여 Windows에서 Linux로 업로드된 발음 구별 부호가 포함된 파일을 보고 실행합니다.

cat 및 WinSCP를 사용하여 Windows에서 Linux로 업로드된 발음 구별 부호가 포함된 파일을 보고 실행합니다.

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에 붙여넣으면 실행할 수 있습니다. 새 파일에 넣을 때 문제가 없는 새 스크립트. 업로드된 버전이 "손상"(더 나은 단어가 없어서)되는 원인은 무엇입니까?binarytextdos2unix 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

해결책?

  1. 소스 시스템에서 파일을 UTF-8로 생성합니다(Windows 애플리케이션은 이 문자 집합을 지원합니다).

  2. Linux 기반 시스템을 다시 ISO-8859로 다운그레이드합니다. 권장되지 않음(그러나 가능함)

  3. 전송 후 파일 변환:

    iconv -f iso-8859-15 -t utf-8 DE_CopyOldToNew.sh >DE_CopyOldToNew.sh.tmp &&
        mv -f DE_CopyOldToNew.sh.tmp DE_CopyOldToNew.sh
    

관련 정보