FTPを経由したCSVファイルの改行コードが変わってしまう原因

FTPを経由したCSVファイルの改行コードが変わってしまう原因

FTPにCSVを始めとしたテキストベースのファイルをアップロード・ダウンロードした場合にファイルの文字コードが変わってしまう事があります。
その原因と対処法を紹介したいと思います。

改行コードが変わる?

作成時の改行コードから変わる可能性があります。
本来はOS間の改行コードの違いを自動調整するための機能ですが、それが上手く働かずCRCRLF等のあり得ない改行コードになる場合があります。
エディタによっては上手く処理する場合もありますが、システム等に取り込む場合には想定された改行コードではなくなっていれば上手く取り込むことが出来なくなります。

原因

FTP転送モードがアスキーモードの場合、テキストベースのファイルは改行コードがOS依存の改行コードへ自動変換されます。
本来は異なるOS間でファイルをやり取りする場合の改行コードの違いで上手く表示されない問題を解決するための機能ですが、場合によってはそれがトラブルを招くことにもなります。

特に、明確に改行コードが指定されるシステムでやり取りするようなファイルの場合、改行コードが自動変換されるとシステム側が期待する改行コードではなくなり、取り込めなくなる可能性が高いです。

改行コードの確認方法

エディタで改行コードを自動判定する機能が付いている物もありますが、CRCRLF等の例外の改行コードの場合は正しく判定されずCRLFと表示したりするので、注意が必要です。
疑念の余地なく正確に確認する場合はバリナリエディタでファイルを開いて確認しましょう。
バリナリエディタで開くと、ファイル内の文字を文字コードで確認することが出来ます。
改行コードの文字コードを直接確認することで、どのような状態が間違いなく確認することが出来ます。

■Stirling
https://www.vector.co.jp/soft/win95/util/se079072.html

改行コードの文字コード

OS  コード表記  16進表記
UNIX <LF> 0A
Windows <CR><LF> 0D 0A
Macintosh <CR> 0D

改行コードを自動変換せず、そのまま送るには

転送モードをバイナリモードで転送することで、ファイルの中身が自動変換されることなく、そのまま転送することが出来ます。
よくアスキーモードとバイナリモードの使い分けについて、テキストファイルはアスキーモード、それ以外の画像などはバイナリーモードを使いましょうと安易に説明されることもあります。
テキストを人が読むためだけであればアスキーモードは便利ですが、システムで扱う場合はトラブルの原因となるため、必ずバイナリモードで転送しましょう。

転送モードの切り替え方

転送ソフトの場合、転送ソフト側の設定を確認して下さい。
Windows, Linux標準のFTPクライアントの場合、以下のコマンドで転送モードが切り替えられます。
ftp> ascii (アスキーモードに切り替え)
ftp> binary (バイナリーモードに切り替え)

まとめ

人が読むためだけのファイルであればアスキーモードで転送しましょう。
何らかのシステムのアップロード・ダウンロードする場合はバイナリーモードで転送しましょう。
さもなくば改行コードが変わることでトラブルの原因となります。

プログラミングカテゴリの最新記事