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 である。
注意しておかないとハマるかも。

