テキスト・ファイルの行末コードを変更するTech TIPS

テキスト形式は互換性が高いが、行末コードはOS環境によって異なることがある。MS-DOS形式では行末はCRとLF、Mac形式ではCRのみ、UNIX形式ではLFのみとなっている。行末コードをDOS形式に変換するには、moreコマンドかInternet Explorerを使うことができる。

» 2004年03月20日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows 2000 Professional/Windows 2000 Server/Windows XP Professional/Windows XP Home Edition/Windows Server 2003



解説

 「テキスト・ファイル」や「テキスト形式」といえば、一般的には特殊なバイナリ・データを含まず、英数字や記号、漢字/ひらがな/カタカナなどの可読文字ばかりを含むデータ・フォーマットのことを指す。テキスト形式はデータとしての互換性も高く、多くのアプリケーションでそのまま取り扱うことができる。

 だが行末コードの違いにより、同じテキスト形式といっても、一般的には次の3種類が存在する(文字コードの違いは除く)。行末コードとは、改行コードなどと呼ばれることもある文字コード・シーケンスのことであり、PC/AT互換機では一般に[Enter]キーを押すと入力されるコードに相当する。

タイプ 行末コード
MS-DOS/Windows形式 「CR」と「LF」という2bytesの連続した文字コード。「CR」と「LF」は単独では存在せず、常にこの順に2bytes連続して使われる
UNIX/Linux形式 「LF」という1byteの文字コードのみ
Macintosh形式 「CR」という1byteの文字コードのみ
テキスト形式における行末コードの種類
OSによって、テキスト形式における行末コードが異なっている。「CR」は0x0D(16進数表現)、「LF」は0x0Aという制御文字コード。

 表中における「CR(Carriage Return、復帰)」とは、文字コードでいうと0x0D(10進数でいうと13)という制御文字であり、「LF(Line Feed、改行)」とは0x0A(10進数でいうと10)という制御文字を表している。CRはカーソルを左端へ移動させる操作、LFはカーソルを1行下へ移動させる操作を表す。一般にユーザーが入力する場合は[Return]キーや[Enter]キーを1回押すだけだが、表示の場合はCRとLFの両方が揃って初めて次の行の先頭へカーソルが移動する。そのため、OSなどによって、このような違いが出てくる。

 例えば次のような4行のサンプル・テキストを考えてみる。

1: Sample text
2: サンプルテキスト
3: 12345
4:



 4行目は空行である。これを各形式で表現してみると、次のようになる(文字コードはシフトJISとする)。jhdは16進数形式でダンプするコマンドである(標準コマンドではない)。黄色の部分が改行コードを表している。

C:\Text>jhd dos.txt ……DOS/Windows形式
00000000  53 61 6D 70 6C 65 20 74  65 78 74 0D 0A 83 54 83  Sample text..サン
00000010  93 83 76 83 8B 83 65 83  4C 83 58 83 67 0D 0A 31   プルテキスト..1
00000020  32 33 34 35 0D 0A 0D 0A                           2345....

C:\Text>jhd unix.txt ……UNIX形式
00000000  53 61 6D 70 6C 65 20 74  65 78 74 0A 83 54 83 93  Sample text.サン
00000010  83 76 83 8B 83 65 83 4C  83 58 83 67 0A 31 32 33  プルテキスト.123
00000020  34 35 0A 0A                                       45..

C:\Text>jhd mac.txt ……Mac形式
00000000  53 61 6D 70 6C 65 20 74  65 78 74 0D 83 54 83 93  Sample text.サン
00000010  83 76 83 8B 83 65 83 4C  83 58 83 67 0D 31 32 33  プルテキスト.123
00000020  34 35 0D 0D                                       45..



 UNIX形式またはMac形式のテキスト・ファイルをWindowsのメモ帳で開くと、改行コードが無視され、次のように1行につながって表示されてしまう(実際には内部では元の改行コードが保存されている。表示や操作が少しおかしくなるだけである)。

UNIXやMac形式のテキスト・ファイルをメモ帳で開いたところ UNIXやMac形式のテキスト・ファイルをメモ帳で開いたところ
本来ならば4行で表示されるはずが、このように1行につながって表示されてしまう。特にMac形式のテキストの場合は、全選択してコピーし、例えばWord 2000に貼り付けると正しく4行になったように見えるが、行末移動キー([End]キー)を押すと、本来の行末記号(折れ曲がった矢印記号)を越えた位置までカーソルが移動したり、表に変換すると1行になってしまったりするなど、少々変わった挙動を示すことがある。

 このように、アプリケーションによってはMS-DOS/Windows形式(以下DOS形式)ではない改行コードをうまく扱えない場合がある。このような不具合を避けるため、Windows OS上で作業をする場合は、可能ならばDOS形式に変換しておくとよい。

操作方法

 改行コードをDOS形式にするには、本来ならばUNIXやMacからのデータ転送時にすませておくのが望ましい。例えばデータのエクスポート時にMS-DOS形式で書き出しておくとか、FTPならばバイナリ・モードではなく、テキスト・モードを使って転送するなどの方法がある。

 だがすでに転送してしまったファイルの場合は、Windows OSの標準環境だけならば、次のような方法で改行コードを変換することができる。

●方法1―moreコマンドを使う方法

 コマンド・プロンプト上でmoreコマンドに通すことにより、UNIX形式の改行コードをDOS形式に変換することができる。

C:\Text>more < unix.txt > unix-converted.txt ……moreコマンドに通す

C:\Text>jhd unix-converted.txt
00000000  53 61 6D 70 6C 65 20 74  65 78 74 0D 0A 83 54 83  Sample text..サン
00000010  93 83 76 83 8B 83 65 83  4C 83 58 83 67 0D 0A 31   プルテキスト..1
00000020  32 33 34 35 0D 0A 0D 0A                           2345....



 ただしこの方法では、シフトJIS以外の漢字コードの場合は正しく変換できないし、Mac形式のファイルを変換することもできない(Mac形式の場合は、最後に0x0Aが付加されるだけ)。また[TAB]コード(文字コードでいうと0x09)は、(デフォルトでは)8桁ごとの空白文字に変換されてしまう。moreコマンドのオプションなどについては、「more /?」を実行すると表示される。

●方法2―Internet Explorerを使う方法

 TIPS「文字コードを変換する」で紹介した、Internet Explorerを使う方法でも改行コードをDOS形式に変換することができる。

 方法は文字コードの変換の場合と同じで、まず元のテキスト・ファイルをInternet Explorerで開き([ファイル]−[開く]メニューを使うか、ファイルをドラッグ&ドロップする)、そのまま保存するか、テキストを全選択してからほかのアプリケーショに貼り付ければよい。もし漢字コードの選択が違っていて、文字が正しく表示されていなければ、事前にエンコーディング形式を変更しておく必要がある。そうでないと、間違った文字コードでファイルが書き込まれてしまう。詳細については先のTIPSを参照していただきたい。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。