• ベストアンサー

DOS-->UNIXで制御文字?(^M)が付加されてしまう問題

DOS(Windows)で記述したファイルをUNIX(Solaris)へ持ってゆき閲覧すると以下の様に "^M"が行末に挿入されてしまっています。 ------- class TS_opCond { ^M integer sync_hi_1_from;^M integer sync_hi_1_to;^M integer sync_hi_2_from;^M integer sync_hi_2_to;^M integer sync_hi_3_from;^M integer sync_hi_3_to;^M ^M } ------- 現在これが原因でコンパイルが通らないのですが、 1) まず、この文字"^M"は、/bin/vi では見ることが出来ますが、less, emacs, jvim 等では画面で見ることは有りません。less, emacs, jvim でこれを表示させるにはどの様にしたら良いでしょうか? 2) この文字は何ですか?若しくはどういう理由で表示される|されないのでしょうか? 3) DOS(windows)で作成したtxtをUNIXへ持っていった時にこの問題をなくすためにはどのようにしたら宜しいのでしょうか?? ※emacs でファイルを表示させると"DOS"と認識しています。 ※ファイルの生成は詳細には、オリジナルはUNIX上で作成し、eucでセーブされています。それをwindowsへ持ってゆきmeadowで編集しました。meadow上では特にコーディングに関する問いかけが有りませんでした。 以上、宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.4

3) についてだけ少々。 Windows(SJIS/CR+LF)で作成したファイルを Emacs(Meadow) で UNIX(EUC/LF)の形式にするには、C-x C-m f(C-x RET f, set-buffer-file-coding-system) と打ち込みます。 すると「Coding system for visited file (default, nil) :」と聞かれますので、 「euc-jp-unix」と答えます。 そしてファイルを保存すれば、UNIX で見られる形式になります。

その他の回答 (6)

  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.7

うまくいったでしょうか。 先の回答の逆に UNIX→Win にファイルを持っていくなら、バッファコーディングシステムに 「sjis-dos(または shift_jis-dos)」を選んでバッファを保存しましょう。 また、Perl や Ruby なら改行形式が違う OS で作ったファイルを読み込んでも 書き出すときにネイティブ形式にしてくれるはずです。 文字コードの変換は行わねばなりませんが、例えば Ruby のワンライナーならこんな感じ。 元ファイルはファイル名の後ろに「~」がついて保存されます。 ruby -i~ -rkconv -ne 'puts $_.toeuc' dosfile # Win→UNIX ruby -i~ -rkconv -ne 'puts $_.tosjis' unixfile # UNIX→Win # なぜ手元の Ruby では「-pe '$_.toeuc'」と書けないのだろう? なお 1) については、Emacs(Meadow) では自分でコーディングシステムを判断して 表示を最適化しますので、あえて出すこともないと思いますけど。 コーディングシステムと改行文字の状態はモードラインに出ています。 Emacs20以降(Meadow) の場合なら、「SJIS/CR+LF=S\」、「EUC/LF=E(UNIX)」 のようになります。

noname#9414
noname#9414
回答No.6

ほとんど回答が書かれているので、補足的なことを・・・ エディタで保存する際に、文字コードをEUCという指定をしても、改行コードがCR+LFだったら意味がありませんので、改行コードもきちんと修正ができるWZ Editorなどで保存した方がいいかと思います。 フリーのエディタでもMKEditorやTeraPadといったものでも確か「文字コード」と「改行コード」が指定できたはずなので、そちらで試してみたらどうでしょうか? 間違いがありましたらご指摘ください。 ではでは☆

  • yfujii
  • ベストアンサー率17% (14/80)
回答No.5

下記でどうでしょう 1.viでファイルを開く 2.:%s/^M//g ここでの^Mは[ctrl]+v[ctrl]+mと入力します これで余分なコントロールコード^Mが消えるはずです 3.セ-ブしなおして下さい

  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.3

DOS(Windows)のファイルは改行をCR+LFで作成されていますが、 UNIXではLFだけなので、よけいなCRが^Mとして表示されます。 ftpでファイルを持っていっているなら、ASCIIモードで転送すればよかったかも。 すでにあるファイルを何とかしたいのでしたら、vi上で :%s/^M// で置換することもできます。(^Mの入力は^V^Mで可能) 沢山のファイルがある場合は、なんかのコマンドの出力を リダイレクトしてもいいかもしれませんが、ちょっとわかりません。 (nkfあたりでできた気もする・・)

  • yyukami
  • ベストアンサー率46% (110/237)
回答No.2

改行コードの違いですね。 WindowsではCR+LFなのに対して、UNIXではLFなので行末に余計なコードが残ってしまう、ということです。 で、FTPで転送するとき、バイナリモードではなくアスキーモードで転送すればこの改行コードも変換してくれると思います。 あと、UNIX上で変換したい場合は、参考URLを見ていただければ良いと思います。

参考URL:
http://www.sparcstation.org/software/sol_charset.html
  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.1

DOSとUNIXの改行コードの違いです。 UNIXはLFで改行、DOSはLF+CRで改行です。 表示されている^MはCR(コード13)です。 DOSのテキストエディタでEUCで保存できるもの(秀丸など)がありますので、それをお使いになるか、転送する時にFTP転送なら、テキストのコード変換をして送るようにすれば^Mは出なくなります。

関連するQ&A