特拉维斯CI编ü为Ã

时间:2016-08-25 15:29:59

标签: python unicode travis-ci python-unicode

我正在用Python编写一些Unicode字符串到HTML。我这样做的方法是在内部使用Unicode,只在输出时进行编码。如下所示:

with open(filename, 'w') as f:
    f.write(s.encode("utf-8"))

这在我的本地计算机上运行正常。但是当它被放到Travis CI时,生成的文件有ü代替ü。有什么想法吗?

这是我的.travis.yml

language: python
python: 2.7.10
install: pip install -r requirements.txt
script: python main.py -d
deploy:
  provider: s3
  access_key_id: XXX
  secret_access_key:
    secure: XXX
  bucket: www.my.org
  region: us-east-1
  skip_cleanup: true
  default_text_charset: 'utf-8'
  local-dir: output

更新

可以重现问题的最小Python代码如下:

from pyquery import PyQuery as pq

argurl = 'http://hackingdistributed.com/tag/bitcoin/'

d = pq(url=argurl)

authors = []
for elem in d.find("h2.post-title a"):
    pubinfo = pq(elem).parent().parent().find(".post-metadata .post-published")
    author = pq(pubinfo).find(".post-authors").html().strip()
    authors.append(author)

with open('output/test.html', 'w') as f:
    f.write(': '.join(authors).encode('utf-8'))

查看output/test.html以查看ü

1 个答案:

答案 0 :(得分:-1)

这似乎是因为您的浏览器可能错误地读取了该文件。最简单的解决方法是将BOM标记添加到文件的开头,将其编码为UTF-8 BOM。

以下是写入文件的固定代码:

with open('output/test.html', 'w') as f:
    f.write(u'\ufeff'.encode('utf-8')) # BOM marker
    f.write(': '.join(authors).encode('utf-8'))