6

我尝试从不同的列表项创建新句子。当我通过 unicode 打印它时,它给出了错误。我可以正常打印(没有unicode)。当我尝试将其发布到网站时,它会出现同样的错误。我坚信如果我可以用 unicode 修复它,当我将它发布到网站时它会起作用。

p=['Bu', 'Şu']
k=['yazı','makale']
t=['hoş','ilgiç']
connect='%s %s %s'%(p[randint(0,len(p)-1)],k[randint(0,len(k)-1)],t[randint(0,len(t)-1)])
print unicode(connect)

And the output is :
Error: UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 0: ordinal not in range(128)
4

4 回答 4

1

首先,您应该将其放在脚本的顶部,# -*- coding: utf-8 -*-以便能够在脚本中使用非 ascii 字符。此外,将 decode str 打印到 unicode 将解决您的问题。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from random import randint

p=['Bu', 'şu']
k=['yazı','makale']
t=['hoş','ilginç']
connect='%s %s %s'%(p[randint(0,len(p)-1)],k[randint(0,len(k)-1)],t[randint(0,len(t)-1)])
print connect.decode('utf-8')
于 2014-11-11T09:41:56.883 回答
0

您应该在脚本顶部放置这样的标题并指定系统上的编码。建议您阅读更多内容,因为您可能经常遇到此类问题。这里有一些资源

#!/usr/bin/env python
# -*- coding: latin-1 -*-

请务必将上述“latin-1”替换为适合您的“latin-1”。

于 2014-11-11T09:35:45.260 回答
0
>>> p=['Bu', 'Şu']
>>> k=['yazı','makale']
>>> t=['hoş','ilgiç']
>>> connect='%s %s %s'%(p[randint(0,len(p)-1)],k[randint(0,len(k)-1)],t[randint(0,len(t)-1)])
>>> print connect.decode('utf-8')
Şu makale ilgiç
于 2014-11-11T09:49:37.563 回答
0

使用非 ASCII 字符时,请在文件顶部指定源代码的编码。然后,对所有文本使用 Unicode 字符串:

#coding:utf8
from random import randint
p=[u'Bu', u'Şu']
k=[u'yazı', u'makale']
t=[u'hoş', u'ilgiç']
connect= u'%s %s %s'%(p[randint(0,len(p)-1)],k[randint(0,len(k)-1)],t[randint(0,len(t)-1)])
print connect

输出:

Şu yazı ilgiç

UnicodeEncodeError如果您的执行环境不支持字符集,您仍然可以获得。理想情况下使用支持 UTF-8 输出编码的环境。

于 2017-03-19T15:47:04.833 回答