読者です 読者をやめる 読者になる 読者になる

.pyxはutf-8-sigにしてはいけない

cython
# -*- coding: utf-8-sig -*-
print(b'abc')
print('abc')
print('abc'.encode('utf-8-sig'))
print('abc'.encode('utf-8'))
env = Environment()
env.Append(
    CPPPATH=['C:/Python34/include'],
    LIBPATH=['C:/Python34/libs'],
    )
env.Command('hoge.cpp', 'hoge.pyx', 'python -m cython --embed --cplus -3 -o $TARGET $SOURCE')
env.Program('hoge.cpp')
$ python -m cython --version
Cython version 0.24

$ scons hoge.exe
$ ./hoge.exe
b'\xef\xbb\xbfabc'
abc
b'\xef\xbb\xbfabc'
b'abc'

Cythonはヘッドラインを解析して文字列のエンコードを変えてるっぽいんだけど、utf-8-sigが来ることを想定していなくてBOMが入る。ソースファイルにutf-8-sigは使うなということか。