CRLFで改行するWindows(Linuxは違うから差が出る)

Q
Q

CRLFってなに?
改行ってのは知ってんだけど。

SunShine!
SunShine!

うん。改行。
改行コードのこと。
「CR + LF」で改行するのはWindowsね。
Linuxとかは「LF」だけだから、ファイルはバイナリーで転送してね。

VBA

改行コードって
奥が深い

改行コードを意識しなきゃいけないようかことがあるのかって話はあるが。
仕事してると、文字化けやらレイアウト崩れやらで、地味にやること増えちゃったりとかする。(かもしれない。)
特に、サーバーからファイルを貰ってきたとかその逆とかいったときにさ。
そんなときにちょっと考えてみてね。くらいの話。

なるべくシンプルに説明したい

ひとことで「改行」といっても

改行コードの話ね。
ASCIIの改行コード。Unicodeの改行コードはもっと多いので。

ターミナル

捉え方としては、

コンピューターの世界で、改行させるためのコードは、「CR」(0x0D)と「LF」(0x0A)という2種類があります。
OSの種類によって改行コードは異なります。たとえば

  • LF Only: UNIX系(Linuxとかも)、macOS などなど
  • CR+LF: MS系(MS-DOS、Windows) などなど
  • CR Only: 古いMac などなど

です。
だから異なるOSで相互にファイルをやり取りするときには、改行コードのことも考えてください。

ってことで。

LinuxサーバーのテキストファイルをWindows環境に持ってきたら、なんか文字化けしたとかゆーことがある。
たぶんファイル転送用のツール(Win SCP とか)使ってるんだろうから、バイナリーモードにしてね。ってこと。

歴史を知ると案外おもしろい

ビット配列

なんでわざわざ複数種類?とか、おいMac!!wとか、言いたいことがたくさんあろうが。
歴史を知ると、CRとLFが存在する謎は解ける。そして、そこから分かるのは、しがらみってやーねってことかな。

タグ系の言語だと、あんまり文字コードは気にしないかもしれんが。
知っておくといいことあるよ。たぶん。
サーバーの管理とかするだろうからね。

あんまり小難しくならないように端折るから、詳しく知りたくなったらキーワードを検索してみるといいよ。

「CR」と「LF」

ちゃんと意味があるんだよ。
これ知っとくと覚えやすいでしょ。

覚える必要があるかどうかは、議論が分かれるがw

「CR」とは

Carriage Return

きゃりっじりたーん

直訳だと「復帰」とか。こっちから説明するとややこしいんだ。
そーゆーもんだって覚えといて。

「LF」とは

Line Feed

らいんふぃーど

直訳だと「改行」なんだけど、イメージは「次の行へ移れ!」って意味。
詳しくは次ね。

昔はね・・・

プリンターで印刷する脳だったんだよ。
いまどきの複合機みたいなのじゃなくて、タイプライターみたいに1行ずつの。

タイプライター
イメージね

改行するってことは、印刷ヘッドの位置を動かすってこと。
以下のような2段階処理だったんだ。

  1. ヘッドを行の最初へ
  2. ヘッドを次の行へ
ヴァイオレット

はい。これで分かった?
CRってのは、行の最初へ戻ってねってこと。復帰してねって。
最初まで戻ったら、次の表に移ってねって。

なんで処理が分かれてるかって?
だから、プリンター脳だったんだって。あんまり高度なことができるようなリソースもなかったんでしょうよ。

ちょっと前はね・・・

Macか、Windowsか、はたまたLinux系か、みたいな構図になって、改行コードやばくね?ってなったんだな。
そりゃそうだよな。

MacでつくったテキストファイルをLinuxに転送すると、改行されてないってんだから。。

フィシュ

そもそもCRを改行にするってどぉなの?ってのはあろう。
そんなこといったって、それで実装しちゃったんだから。
後発メーカー(Microsoft社)は考えたんだろうね。いろんな環境で作成されたファイル。どんなもんだろうと改行を認識させるために、両方入れればよくね?って。(作り話ですw)

いずれにしても、WindowsはCR+LFを採用した。
意味だけ見ればLFだけでいいのにね。。
VBAで改行させたかったら「vbCrLf」って書くのがそれ。

VBA
「VBA」の記事一覧です。

最近はね・・・

改行コードなんて意識しなくても、アプリ側でいい感じにやってくれる。

CRとLFの組合せで苦労するのは分かってるから。
うまいことプログラム側で処理してしまったほうがいい。
実は、Windowsでも、ほとんどの場合、CRだろうがLFだろうがCRLFだろうが、改行してくれる。

工具

とはいえ、古い仕組みで動いてるものもあろう。
結局、改行コードを考えなきゃいけない局面はあるんだよ。

法律書

あとね。
Unicodeってゆー新たな標準体系がありましてですな。
ここでは改行に関する定義がもうちょい多い。
NEL(U+0085)(Next Line)、LS(U+2028)(Line Separator)、PS(U+2029)(Paragraph Separator)ってのが追加で。

OSによる違いがあるってことで

いろいろと書いたけど、覚えておきたいことはシンプル。

OSによって改行コードが違うことがある。
だから改行されないとか、文字化けするとかってことになるんだ。
なんか改行マークが違う~ってのも、ちょっと関係してるかもね。

六角形

奥深い。
楽しいねw
プログラム書くだけじゃだめなんだよ。
考慮しなきゃいけないことがけっこうあるの。
このへんの勘が働くと、優秀とかって評価されるよ。たぶん。

なるべくシンプルに説明したい

ご意見やご感想などお聞かせください! コメント機能です。

タイトルとURLをコピーしました