Home‎ > ‎

Windows標準出力特有の処理

Windows ではキャラクタ出力がテキストモードとバイナリモードの 2 種類あります。通常の標準出力(コンソールへの出力、ファイルへの書き出し)はテキストモードになっているため、出力に際して C の処理系が LF(0x0A)をCRLF(0x0D,0x0A)へ自動的に変換します。このため、何の対策もしないと、行末に明示的に CRLF を付加するプログラムの出力結果は、行末が CRCRLF となってしまいます。Pisa でもこの現象が起き、Windows では生成された PDF を正常に閲覧することができない場合があります。

この問題を回避するには、出力先がファイルであれば open する際にバイナリーモード(os.O_BINARY)を指定すればよいのですが、標準出力の場合は open という手続がありません。この場合は、ReportLabPisa の利用に先立って次のコードを実行します。

# disable auto-CRLF on Windows
import sys
if sys.platform == "win32":
    import os, msvcrt
    msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

Comments