CRLFってなに?
改行ってのは知ってんだけど。
うん。改行。
改行コードのこと。
「CR + LF」で改行するのはWindowsね。
Linuxとかは「LF」だけだから、ファイルはバイナリーで転送してね。
改行コードって
奥が深い
改行コードを意識しなきゃいけないようかことがあるのかって話はあるが。
仕事してると、文字化けやらレイアウト崩れやらで、地味にやること増えちゃったりとかする。(かもしれない。)
特に、サーバーからファイルを貰ってきたとかその逆とかいったときにさ。
そんなときにちょっと考えてみてね。くらいの話。
ひとことで「改行」といっても
改行コードの話ね。
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段階処理だったんだ。
- ヘッドを行の最初へ
- ヘッドを次の行へ
はい。これで分かった?
CRってのは、行の最初へ戻ってねってこと。復帰してねって。
最初まで戻ったら、次の表に移ってねって。
なんで処理が分かれてるかって?
だから、プリンター脳だったんだって。あんまり高度なことができるようなリソースもなかったんでしょうよ。
ちょっと前はね・・・
Macか、Windowsか、はたまたLinux系か、みたいな構図になって、改行コードやばくね?ってなったんだな。
そりゃそうだよな。
MacでつくったテキストファイルをLinuxに転送すると、改行されてないってんだから。。
そもそもCRを改行にするってどぉなの?ってのはあろう。
そんなこといったって、それで実装しちゃったんだから。
後発メーカー(Microsoft社)は考えたんだろうね。いろんな環境で作成されたファイル。どんなもんだろうと改行を認識させるために、両方入れればよくね?って。(作り話ですw)
いずれにしても、WindowsはCR+LFを採用した。
意味だけ見ればLFだけでいいのにね。。
VBAで改行させたかったら「vbCrLf」って書くのがそれ。
最近はね・・・
改行コードなんて意識しなくても、アプリ側でいい感じにやってくれる。
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
プログラム書くだけじゃだめなんだよ。
考慮しなきゃいけないことがけっこうあるの。
このへんの勘が働くと、優秀とかって評価されるよ。たぶん。
ご意見やご感想などお聞かせください! コメント機能です。