Glade の覚書がちっとも進まない。
やっぱり普段使わないものの覚書って無理があるかも。
ということで Blog でやった IronPython ネタを地味にまとめている。
つまりほとんどコピペ、でコードが IronPython 2.6 でキチンと動くか確認してみたんだが
IronPython の \n が CR/LF になるんだが…
以前は LF のみだったような気がするんだけど違ったかな。
追記
まてよ、もしかして System.IO と組み込み open では扱いが違うのかな?
というより IronPython では内部で \n はどう保持されているんだろう?
気になったのでテストコードを作って試してみた。
# -*- coding: UTF-8 -*- import System crlf_test = "a\nb" # Inside is \n==LF bytes = System.Text.Encoding.UTF8.GetBytes(crlf_test) for i in range(len(bytes)): print bytes[i] # The following code is \n==LF write sr = System.IO.StreamWriter("test1.txt") sr.Write(crlf_test) sr.Close() # The following code is \n==CR/LF write f = open("test2.txt", "w") f.write(crlf_test) f.close()
やはり open() で書き込む時にのみ LF を CR/LF に変換しているようで。
標準 Python モジュールの関係あたりで CPython に無理やり合わせたのだろうと憶測。
以前は LF のみだったような気がしたのはコレに気が付かなかっただけかな。
ついでだから C# での内部も一応探ってみる。
using System; class Program { static void Main(string[] args) { System.Byte[] bytes = System.Text.Encoding.UTF8.GetBytes("a\nb"); foreach(System.Byte b in bytes) { Console.WriteLine(b); } } }
当然のように LF に、つまり .NET Framework なら内部では cli 仕様の \n==LF である。
注意しておかないとハマるかも。