• ベストアンサー

文字コード

unixで記述したファイル(恐らくはEUCコードと思われます)はDOS環境や、場合によってはunix上のviやlessなどでも、 ^M が行末に表示されてしまいうっとうしいことがあります。 1)この制御コードは一体何なのですか? 2)どのような場合、この制御コードが挿入されますか?あるいは、どのような場合、このコードが表示されるのですか? 3)"^M"が表示されてしまっている場合、どのようにすれば表示がされなくなるのでしょうか? (その場しのぎ的ではあるが、nkf -s などとしてSJISに変換させれば、dos系のvi や lessではまともに表示されます。他の方法を教えてください...例えば、vi や lessを文字コードを指定して起動するなど...) #そのほか、文字コード関連でツボが有りましたら教えてください。

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.3

> 1)この制御コードは一体何なのですか? 文字コードの話とは直接関係ありません。OSによって、「改行」を表すコードが違うことがこの現象を引き起こします。 いわゆるDOS系では、改行は 0x0d+0x0a の2バイトで表されます。 unix系では、改行は 0x0a の1バイトで表されます。 > 2)どのような場合、この制御コードが挿入されますか?あるいは、どのような場合、このコードが表示されるのですか? この制御コードは挿入されるのではなくて、元々「ある」ものです。 unixの流儀で書かれたプログラムが DOS 起源のテキストファイル(*)をそのまま読もうとすると 0x0d が余ります。 それが ^M です。   (*) 例えば、DOS から ftp のバイナリモードでテキストファイルを持ち上げたりするとこういうことになる > 3)"^M"が表示されてしまっている場合、どのようにすれば表示がされなくなるのでしょうか? 確かにうっとおしいので、有名どころでは対処されています。 今、確認してみたのですが、私が使っている less version 332+iso224 や vim の JVim 3.0-j2.0a なんかでは 先のケースで挙げたようなファイルでも ^M は表示されません。 因みに OS に付属してくる vi では ^M が表示されます。 # というか、^M が表示される方が普通なんですけどね

その他の回答 (4)

  • ide1
  • ベストアンサー率77% (7/9)
回答No.5

> #そのほか、文字コード関連でツボが有りましたら教えてください。 ご質問とは関連無いかもしれませんが...。 WindowsマシンからUXIXマシンにFTPソフトでファイルコピー を行い、さらにそのコピーのとき、「アスキーモード」を指定 しますと、改行コードが変換され、^Mをとってくれます。 なお、FTPソフトはSJISからEUCへの変換もしてくれます。(指定が必要です。) ※FTPソフトは、あるマシンから別のマシンにファイルを コピーするときに使います。(Windowsのエキスプローラ で行うファイルコピーと同じようなことをFTPという仕組み で行います。) 私の経験で^Mが付くときは ・FTPソフトでアスキーモードの指定をしていない ・FTPソフトでアスキー/バイナリ自動判別モードにして いるが、サフィックスがFTPソフトに登録されていないため、 バイナリでコピーされてします。(例えば .c というサフ ィックスが登録されていないなど。) です。 いろいろ原因はありえると思いますが。

参考URL:
http://www.vector.co.jp/soft/win95/net/se061839.html
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.4

横レスです。 y2000さんのやり方で、 :%s/^M// では^Mを入力した時点でコマンドが解釈されてしまうので :%s/^V^M// と入力しましょう。 (言うまでもないと思いますが、^V, ^M はそれぞれ  Ctrl+V, Ctrl+M です。)

  • y2000
  • ベストアンサー率44% (4/9)
回答No.2

y2000です。 すみません。 記述に誤りがありました。 3) 他の方法としては viで :%s/^M// と入力すると削除できるようです。 です。

  • y2000
  • ベストアンサー率44% (4/9)
回答No.1

1)、2) windowsなどで書かれた英数字のみのテキスト文章をLinuxで読むと改行ごとに^Mが残ってしまうようです。 3) 他の方法としては viで :%2/^M// と入力すると削除できるようです。

関連するQ&A

専門家に質問してみよう