UnicodeDecodeError:'ascii' 编解码器无法解码位置 1 中的字节 0xef
- 2025-02-20 09:22:00
- admin 原创
- 24
问题描述:
我在尝试将字符串编码为 UTF-8 时遇到了一些问题。我尝试了很多方法,包括使用string.encode('utf-8')
和unicode(string)
,但还是出现了错误:
UnicodeDecodeError:'ascii'编解码器无法解码位置 1 中的字节 0xef:序数不在范围内(128)
这是我的字符串:
(。・ω・。)ノ
我不知道出了什么问题,有什么想法吗?
编辑:问题是打印字符串时无法正确显示。此外,当我尝试转换它时,会出现此错误:
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(xefxbdxa1xefxbdxa5xcfx89xefxbdxa5xefxbdxa1)xefxbex89'
>>> s1 = s.decode('utf-8')
>>> print s1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in range(128)
解决方案 1:
这是因为您的终端编码未设置为 UTF-8。这是我的终端
$ echo $LANG
en_GB.UTF-8
$ python
Python 2.7.3 (default, Apr 20 2012, 22:39:59)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(xefxbdxa1xefxbdxa5xcfx89xefxbdxa5xefxbdxa1)xefxbex89'
>>> s1 = s.decode('utf-8')
>>> print s1
(。・ω・。)ノ
>>>
在我的终端上,该示例与上面的示例一起工作,但如果我删除该LANG
设置,它将不起作用
$ unset LANG
$ python
Python 2.7.3 (default, Apr 20 2012, 22:39:59)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(xefxbdxa1xefxbdxa5xcfx89xefxbdxa5xefxbdxa1)xefxbex89'
>>> s1 = s.decode('utf-8')
>>> print s1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in range(128)
>>>
请查阅你的 Linux 版本的文档,了解如何使此更改永久生效。
解决方案 2:
尝试:
string.decode('utf-8') # or:
unicode(string, 'utf-8')
编辑:
'(xefxbdxa1xefxbdxa5xcfx89xefxbdxa5xefxbdxa1)xefxbex89'.decode('utf-8')
给出u'(/uff61/uff65/u03c9/uff65/uff61)/uff89'
,这是正确的。
所以你的问题一定出在其他地方,可能如果你尝试用它做一些事情,就会有一个隐式转换正在进行(可能是打印,写入流......)
要说更多,我们需要看一些代码。
解决方案 3:
我对 mata 在https://stackoverflow.com/a/10561979/1346705上的评论以及 Nick Craig-Wood 的演示表示赞同。您已正确解码字符串。问题出在命令上print
,因为它将 Unicode 字符串转换为控制台编码,而控制台无法显示该字符串。尝试将字符串写入文件并使用支持 Unicode 的一些不错的编辑器查看结果:
import codecs
s = '(xefxbdxa1xefxbdxa5xcfx89xefxbdxa5xefxbdxa1)xefxbex89'
s1 = s.decode('utf-8')
f = codecs.open('out.txt', 'w', encoding='utf-8')
f.write(s1)
f.close()
然后你就会看到(。・ω・。)ノ
。
解决方案 4:
如果您正在远程主机上工作,请查看/etc/ssh/ssh_config
本地电脑。
当此文件包含一行时:
SendEnv LANG LC_*
#
通过在行首添加注释将其删除。这可能会有所帮助。
通过此行,ssh
将您 PC 的语言相关环境变量发送到远程主机。这会导致很多问题。
解决方案 5:
utf-8
尝试在脚本开始时设置系统默认编码,以便所有字符串都使用该编码进行编码。
# coding: utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
解决方案 6:
按照Andrei Krasutski 的建议,在脚本顶部使用下面的代码是可以的。
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
但我建议您也在# -*- coding: utf-8 -*
脚本的最顶部添加一行。
当我尝试执行时,省略它会引发以下错误basic.py
。
$ python basic.py
File "01_basic.py", line 14
SyntaxError: Non-ASCII character 'xd9' in file basic.py on line 14, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
以下是引发上述错误的代码basic.py
。
有错误的代码
from pylatex import Document, Section, Subsection, Command, Package
from pylatex.utils import italic, NoEscape
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
def fill_document(doc):
with doc.create(Section('ِش سثؤفهخى')):
doc.append('إخع ساخعمي شمصشغس سحثشن فاث فقعفا')
doc.append(italic('فشمهؤ ؤخىفثىفس شقث شمسخ ىهؤث'))
with doc.create(Subsection('آثص ٍعلاسثؤفهخى')):
doc.append('بشةخعس ؤقشئغ ؤاشقشؤفثقس: $&#{}')
if __name__ == '__main__':
# Basic document
doc = Document('basic')
fill_document(doc)
然后我# -*- coding: utf-8 -*-
在最顶部添加了一行并执行。成功了。
代码无错误
# -*- coding: utf-8 -*-
from pylatex import Document, Section, Subsection, Command, Package
from pylatex.utils import italic, NoEscape
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
def fill_document(doc):
with doc.create(Section('ِش سثؤفهخى')):
doc.append('إخع ساخعمي شمصشغس سحثشن فاث فقعفا')
doc.append(italic('فشمهؤ ؤخىفثىفس شقث شمسخ ىهؤث'))
with doc.create(Subsection('آثص ٍعلاسثؤفهخى')):
doc.append('بشةخعس ؤقشئغ ؤاشقشؤفثقس: $&#{}')
if __name__ == '__main__':
# Basic document
doc = Document('basic')
fill_document(doc)
谢谢。
解决方案 7:
我的终端没有问题。上述答案帮助我找到了正确的方向,但直到我添加了以下内容后,它才对我起作用'ignore'
:
fix_encoding = lambda s: s.decode('utf8', 'ignore')
正如下面的评论所指出的,这可能会导致不理想的结果。另一方面,它也可能只是很好地完成了任务,让你不介意丢失一些字符。
解决方案 8:
这适用于 ubuntu 15.10:
sudo locale-gen "en_US.UTF-8"
sudo dpkg-reconfigure locales
解决方案 9:
您的字符串似乎被编码为utf-8
,那么问题到底是什么?或者您在这里想做什么?
Python 2.7.3 (default, Apr 20 2012, 22:39:59)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(xefxbdxa1xefxbdxa5xcfx89xefxbdxa5xefxbdxa1)xefxbex89'
>>> s1 = s.decode('utf-8')
>>> print s1
(。・ω・。)ノ
>>> s2 = u'(。・ω・。)ノ'
>>> s2 == s1
True
>>> s2
u'(/uff61/uff65/u03c9/uff65/uff61)/uff89'
解决方案 10:
就我而言,这是因为我的 Unicode 文件保存时带有“BOM”。为了解决这个问题,我使用 BBEdit 打开文件,并执行“另存为...”,选择编码“Unicode (UTF-8)”,而不是它自带的“Unicode (UTF-8, with BOM)”
解决方案 11:
我遇到了相同类型的错误,并且我发现控制台无法以其他语言显示字符串。因此,我进行了以下代码更改,将 default_charset 设置为 UTF-8。
data_head = [('x81xa1x8fox89xefx82xa2x95xdbx8fxd8x90xa7x93xx81xcb3x8cx8ex8cpx91xb1x92x86(x81x86x81xdex81x85)x81xa1x8fx89x89xf1x88xc8x8aOx81Ax82xa8x8bxe0x82xccx90Sx94zx82xcdx88xeax90xd8x95sx97vx81xa1x83}x83bx83vx82xccx82xa8x8ex8ex82xb5x95xdbx8cxafx82xc5x8fox89xefx82xa2x8amx92xe8x81xa1', 'shift_jis')]
default_charset = 'UTF-8' #can also try 'ascii' or other unicode type
print ''.join([ unicode(lin[0], lin[1] or default_charset) for lin in data_head ])
解决方案 12:
这是最好的答案:
https://stackoverflow.com/a/4027726/2159089
在Linux中:
export PYTHONIOENCODING=utf-8
所以sys.stdout.encoding
也可以。
解决方案 13:
BOM,对我来说,这太常见了
vi 文件,使用
:set nobomb
并保存。这几乎总能解决我的情况
解决方案 14:
我遇到了同样的错误,URL 包含非 ASCII 字符(值大于 128 的字节)
url = url.decode('utf8').encode('utf-8')
对我来说,在 Python 2.7 中,我猜这个分配改变了str
内部表示中的“某些东西”——即,它强制对返回的字节序列进行正确的解码url
,并最终将字符串放入utf-8 str
中,所有魔法都在正确的位置。Python 中的 Unicode 对我来说是黑魔法。希望有用
解决方案 15:
我通过在文件 settings.py 中使用 'ENGINE': 'django.db.backends.mysql' 来解决这个问题,不要使用 'ENGINE': 'mysql.connector.django',
解决方案 16:
只需使用 将文本明确转换为字符串即可str()
。对我有用。
- 2025年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)