質問
ソフトウェアは他のシステムからの改行文字を処理しますか?
Linux/BSD linefeed ^J 10 x0A
Windows/IBM return linefeed ^M^J 13 10 x0D x0A
old Macs return ^M 13 x0D
others?
狂気の理由で、テキストファイルでLinuxバージョンの改行文字を使用します。しかし、テキストファイルをWindowsに移動すると、一部のプログラムがテキスト内の改行文字でうまく再生されません。これにどう対処しますか?
解決
彼らが言うように、あなたが書くことは厳しく、読むことはリベラルです。
アプリケーションは、両方の行末を正しく読み取ることができるはずです。改行を使用し、Windowsユーザーを混乱させる可能性がある場合は、問題ありません。
しかし、メモ帳用に保存すると、私がプレイするほとんどのプログラムは両方の方法に満足しているようです。
(そして、私はWindowsでCygwinを使用しているので、すべてが面白くなっています)
他のヒント
標準のPythonディストリビューションには、crlf.pyおよびlfcr.pyと呼ばれる2つのコマンドラインスクリプト(ツール/スクリプト内)が付属しており、WindowsとUnix / Linuxの行末を変換できます。
.NETでは、改行は Environment.NewLine
で示されるため、フレームワークは、システムの改行が何であれ(CR + LFまたはCRのみまたはLF)のみ)実行時に使用します。もちろん、これは最終的にMonoで役立ちます。
最新のWindowsプログラム(メモ帳を除く)のほとんどは、改行のみのファイルを正常に処理できると思います。ただし、Windowsプログラムで生成されたファイルには、crlfで終わる傾向があります。
ほとんどの場合、行末はランタイムライブラリによってプラットフォーム固有の方法で自動的に処理されます。たとえば、 fopen(...、" r")
でファイルを開くCプログラムは、実際の行末に関係なく、すべてのプラットフォームで一貫した方法で行を表示します(改行のみ) 。
私が知っている限りでは、行セパレータに問題があるのはメモ帳だけです。世界の他のほとんどのソフトウェアは、これら3つのタイプのセパレーターのいずれかを受け入れ、他のタイプのセパレーターも同様に受け入れます。残念ながら、最近のほとんどのコンピューターユーザーにとって、メモ帳は最初の手段のエディターです。この状況を継続させることは、Microsoftにとって非常に無責任だと思います。私はVistaで遊んだことはありませんが、XPのように問題はまだそこにあると信じています。誰もが次のバージョンについて知っていますか?
他の人が言ったように、必要に応じて多くの(非常に簡単な)コンバーターがあります。 ASCIIモードでFTPを使用して転送を行う場合、変換は自動的に行われることに注意してください...
実際、メモ帳はLFエンディングに問題がある最も顕著なプログラムです...
私が見た中で最も厄介なのは、本質的にUnixでWindowsファイルを編集している人や、適切な形式をチェックせずに何かを追加するユーティリティによって行われる、混合行末のテキストファイルです。
幸せになるためには、標準の推奨事項に従ってください。
http://unicode.org/standard/reports/tr13/tr13- 5.html
そして、古いMacOSのような特別な場合のオプションを提供します。または、ケースを確実に検出できる場合は、ケースを自動的に処理します。
Unixスタイルでテキストをフォーマットすることをお勧めします。 Windowsユーザーのことは忘れてください。 Windowsユーザーはドキュメントまたはデータにプレーンテキストを使用しないためです。プレーンテキストを渡すと、それらは動揺します。彼らは常にWordまたはExcelドキュメントを期待しています。プレーンテキストファイルを使用している場合でも、取得する唯一の問題は、奇妙にテキストを表示することです。
しかし、Unixユーザーはすべてのツールが正しく動作しないことを経験します。特にUnixの場合は、標準に厳密に従ってください。
PS。 ああ、もしあなたのWindowsユーザーが開発者なら、Unixでテキストでフォーマットし、それがUnixからのファイルだと伝えてください。
「取引」と言うときの意味がわかりませんが、基本的には次のように言うことができます。
string convertLineBreaks(String line, String lineBreakYouWant) {
replace all ^M^J or ^M or ^J in line with lineBreakYouWant
return line
}
編集:質問を読み直した後、間違った(ターゲットシステムの)改行を処理できない他の人のプログラムにどのように対処するかを考えています。
1)対処可能なプログラムを使用するか、2)任意のタイプの改行を検出し、システムに適したタイプに変換するスクリプトでファイルを実行することをお勧めします。