【发布时间】:2020-11-11 14:44:16
【问题描述】:
以下代码在python2.7中完美运行
for thepkg in mypkgs.get('package'):
pkgname = thepkg.get('name').encode('utf-8').replace(' ', '_')
print(' <option value="'+pkgname+'">'+pkgname+'</option>')
但在 python3 中它会抛出错误
pkgname = thepkg.get('name').encode('utf-8').replace(' ', '_')
TypeError: a bytes-like object is required, not 'str'
我尝试了各种变体,但是当 thepkg.get('name') 值是非英文字符串(例如日文或中文名称)时,会弹出不同的错误或呈现的 HTML 页面无法正确显示。再次,它在 python2.7 上的 HTML 中完美运行
【问题讨论】:
-
str.encode在 Python 3.x 上的输出是一个bytes对象。bytes.replace要求参数也是bytes对象。阅读例如docs.python.org/3/whatsnew/…。还要看各种stackoverflow.com/…。 -
pkgname = thepkg.get('name').encode('utf-8').decode() 显示 pkgname 现在是一个 str 对象(我删除了替换,以免进一步混淆) ,但 print() 仍然没有显示正确的 HTML
-
添加更多。如果在命令行上执行脚本,它会正确显示。只是浏览器无法以某种方式正确解释它