catとWinSCPを使用して、WindowsからLinuxにアップロードされた発音区別記号を含むファイルを表示して実行します。

catとWinSCPを使用して、WindowsからLinuxにアップロードされた発音区別記号を含むファイルを表示して実行します。

Windowsでファイルを作成しましたDE_CopyOldToNew.sh。次に、WinSCPを使用してファイルをLinuxにアップロードします。このファイルには、ファイルを新しいフォルダにコピーし、新しいファイル名を割り当てる複数のcpコマンドが含まれています。このコマンドには、ウムラウトを含むコマンドが含まれています(たとえば、 aを実行するとGewährleistungsbürgschaftウムラウトcat DE_CopyOldToNew.shが「壊れた」ように表示されます。すると、エラーが発生し、フォルダとファイルのウムラウトが表示されます。良い言葉がないので)なる原因は何ですか?Gew▒hrleistungsb▒rgschaftview DE_CopyOldToNew.shGewährleistungsbürgschaftcp: cannot statGew\344hrleistungsb\374rgschaftbinarytextdos2unix 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
    

関連情報