无法执行以UTF8-sig编码的自动生成的Python脚本

时间:2015-11-06 23:43:50

标签: python unicode encoding utf-8

我正在使用Python脚本从互联网上获取一些文本并将其作为注释放到第一个生成的另一个Python脚本中。 最初我只是使用open()打开创建新的Python脚本,并write()打印到它。

outputFile = open(fileName, 'w')
outputFile.write('#!/usr/bin/python\n')
outputFile.write('\n')
outputFile.write('# ' + lineFromTheInternet + '\n')
outputFile.write('print \'Hello, World!\'\n')

这大部分时间都有效,新脚本会生成,我可以运行它。但是,有时我从互联网上获取的文字有Unicode字符并给我带来问题(UnicodeEncodeError: 'ascii' codec can't encode character u'\xd7' in position 55: ordinal not in range(128))。我将代码替换为:

outputFile = codecs.open(fileName, 'w', 'utf-8-sig)
outputFile.write('#!/usr/bin/python\n')
outputFile.write('\n')
outputFile.write('# ' + lineFromTheInternet + '\n')
outputFile.write('print \'Hello, World!\'\n')

这会正确生成文件,但是当我尝试执行它时,我得到./autogenerated.py: line 1: #!/usr/bin/python: No such file or directory

这必须是编码,因为它是唯一改变的东西,但我不知道如何解决它。

1 个答案:

答案 0 :(得分:2)

Linux还是Windows?这适用于Windows。确保将Unicode字符串写入使用codecs.open打开的文件:

#!/usr/bin/python2
import codecs
with codecs.open('y.py', 'w', 'utf-8-sig') as outputFile:
    outputFile.write(u'#!/usr/bin/python2\n')
    outputFile.write(u'\n')
    outputFile.write(u'# ' + u'Syst\xe9m' + u'\n')
    outputFile.write(u'print \'Hello, World!\'\n')

AFAIK,Linux可能不喜欢UTF-8 BOM。尝试删除它并声明编码,例如文件顶部的#coding:utf8

#!/usr/bin/python2
import codecs
with codecs.open('y.py', 'w', 'utf8') as outputFile:
    outputFile.write(u'#!/usr/bin/python2\n')
    outputFile.write(u'#coding:utf8\n')
    outputFile.write(u'\n')
    outputFile.write(u'# ' + u'Syst\xe9m' + u'\n')
    outputFile.write(u'print \'Hello, World!\'\n')