Glade の覚書がちっとも進まない。
やっぱり普段使わないものの覚書って無理があるかも。
ということで Blog でやった IronPython ネタを地味にまとめている。
つまりほとんどコピペ、でコードが IronPython 2.6 でキチンと動くか確認してみたんだが
IronPython の \n が CR/LF になるんだが…
以前は LF のみだったような気がするんだけど違ったかな。
追記
まてよ、もしかして System.IO と組み込み open では扱いが違うのかな?
というより IronPython では内部で \n はどう保持されているんだろう?
気になったのでテストコードを作って試してみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # -*- 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# での内部も一応探ってみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 である。
注意しておかないとハマるかも。