相关疑难解决方法(0)

为什么我们不应该在py脚本中使用sys.setdefaultencoding("utf-8")?

我见过很少的py脚本在脚本的顶部使用它.在什么情况下应该使用它?

import sys
reload(sys)
sys.setdefaultencoding("utf-8")
Run Code Online (Sandbox Code Playgroud)

python encoding utf-8 python-2.x sys

158
推荐指数
3
解决办法
18万
查看次数

非ASCII字符的SyntaxError

我试图解析包含一些非ASCII cheracter的xml,

代码如下所示

from lxml import etree
from lxml import objectify
content = u'<?xml version="1.0" encoding="utf-8"?><div>Order date                            : 05/08/2013 12:24:28</div>'
mail.replace('\xa0',' ')
xml = etree.fromstring(mail)
Run Code Online (Sandbox Code Playgroud)

但它显示我在'content = ...'这一行上的错误

syntaxError: Non-ASCII character '\xc2' in file /home/projects/ztest/responce.py on line 3, 
but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
Run Code Online (Sandbox Code Playgroud)

在终端它正在工作,但在eclipse IDE上运行它给了我一个错误.

不知道如何克服..

python encoding lxml non-ascii-characters xml-parsing

89
推荐指数
1
解决办法
16万
查看次数

Python:从ISO-8859-1/latin1转换为UTF-8

我有这个字符串已经使用电子邮件模块从Quoted-printable解码为ISO-8859-1.这给了我像"\ xC4pple"这样的字符串,它们对应于"Äpple"(Apple中的瑞典语).但是,我无法将这些字符串转换为UTF-8.

>>> apple = "\xC4pple"
>>> apple
'\xc4pple'
>>> apple.encode("UTF-8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in     range(128)
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

python character-encoding

81
推荐指数
4
解决办法
16万
查看次数

如何在Python <3中将UTF-8编码的文本打印到控制台?

我正在运行一个最新的Linux系统,我的所有语言环境都是UTF-8:

LANG=de_DE.UTF-8
LANGUAGE=
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
...
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)

现在我想将UTF-8编码的内容写入控制台.

现在Python使用UTF-8进行FS编码,但坚持使用ASCII作为默认编码:-(

>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> sys.getfilesystemencoding()
'UTF-8'
Run Code Online (Sandbox Code Playgroud)

我认为最好(干净)的方法是设置PYTHONIOENCODING环境变量.但似乎Python忽略了它.至少在我的系统上ascii,即使在设置envvar之后,我仍然保持默认编码.

# tried this in ~/.bashrc and ~/.profile (also sourced them)
# and on the commandline before running python
export PYTHONIOENCODING=UTF-8
Run Code Online (Sandbox Code Playgroud)

如果我在脚本开头执行以下操作,它可以工作:

>>> import sys
>>> reload(sys)  # to enable `setdefaultencoding` again
<module 'sys' (built-in)>
>>> sys.setdefaultencoding("UTF-8")
>>> sys.getdefaultencoding()
'UTF-8'
Run Code Online (Sandbox Code Playgroud)

但这种做法似乎不洁净.那么,实现这一目标的好方法是什么?

解决方法

而不是更改默认编码 - 这不是一个好主意(请参阅mesilliac的答案) - 我只是sys.stdoutStreamWriter …

python shell encoding ascii utf-8

49
推荐指数
4
解决办法
9万
查看次数

如何在Python中设置默认编码(setdefaultencoding()函数不存在)?

可能重复:
更改python的默认编码?

我正在阅读python中的潜水,它提到在XML解析章节中设置python的默认编码方案.

setdefaultencoding在使用 python的安装-DIR /站点包/ pyanaconda/sitecustomize.py

import sys
sys.setdefaultencoding('utf-8')
Run Code Online (Sandbox Code Playgroud)

但是当我运行脚本时,它会引发:

AttributeError: 'module' object has no attribute 'setdefaultencoding'
Run Code Online (Sandbox Code Playgroud)

无论如何,如何设置默认编码?

我正在使用python 2.7

解决方案: 在python安装中找到site.py.

编辑setencoding功能

def setencoding():
    encoding = "ascii" 
    if 0:
        import locale
        loc = locale.getdefaultlocale()
        if loc[1]:
            encoding = loc[1]
    if 0: #changes comes here, change 0 to 1
        encoding = "undefined" #the encoding you want
    if encoding != "ascii":
        sys.setdefaultencoding(encoding) 
Run Code Online (Sandbox Code Playgroud)

我正在使用python 2.7

python encoding default

16
推荐指数
2
解决办法
3万
查看次数

使用json.dumps()时的UnicodeDecodeError

我的python列表中有以下字符串(从命令提示符处获取):

>>> o['records'][5790]
(5790, 'Vlv-Gate-Assy-Mdl-\xe1M1-2-\xe19/16-10K-BB Credit Memo            ', 60,
 True, '40141613')
>>>
Run Code Online (Sandbox Code Playgroud)

我试过这里提到的建议:更改Python的默认编码?

进一步将默认编码更改为utf-16.但仍json.dumps()抛出异常如下:

>>> write(o)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "okapi_create_master.py", line 49, in write
    o = json.dumps(output)
  File "C:\Python27\lib\json\__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "C:\Python27\lib\json\encoder.py", line 201, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Python27\lib\json\encoder.py", line 264, in iterencode
    return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe1 in position 25: invalid
continuation byte
Run Code Online (Sandbox Code Playgroud)

无法确定这种字符串需要什么样的转换才能 …

python unicode json character-encoding python-2.7

14
推荐指数
1
解决办法
3万
查看次数

UnicodeEncodeError:'ascii'编解码器无法编码位置0-3中的字符:序数不在范围内(128)

当我运行我的代码时,我收到此错误:

UserId = "{}".format(source[1]) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

我的代码是:

def view_menu(type, source, parameters):
    ADMINFILE = 'static/users.txt'
    fp = open(ADMINFILE, 'r')
    users = ast.literal_eval(fp.read())
    if not parameters:
        if not source[1] in users:
            UserId = "{}".format(source[1])
            users.append(UserId)
            write_file(ADMINFILE,str(users))
            fp.close()
            reply(type, source, u"test")
        else:
            reply(type, source, u"test")

register_command_handler(view_menu, 'test', ['info','muc','all'], 0, '')
Run Code Online (Sandbox Code Playgroud)

请问我该如何解决这个问题.

谢谢

python python-2.7

9
推荐指数
3
解决办法
2万
查看次数

Python str(u'a')和u'a'.encode('utf-8')之间的区别是什么?

作为标题,是否有理由不使用str()将unicode字符串转换为str?

>>> str(u'a')
'a'
>>> str(u'a').__class__
<type 'str'>
>>> u'a'.encode('utf-8')
'a'
>>> u'a'.encode('utf-8').__class__
<type 'str'>
>>> u'a'.encode().__class__
<type 'str'>
Run Code Online (Sandbox Code Playgroud)

更新:谢谢你的答案,也不知道我是否使用特殊字符创建一个字符串它会自动转换为utf-8

>>> a = '€'
>>> a.__class__
<type 'str'>
>>> a
'\xe2\x82\xac'
Run Code Online (Sandbox Code Playgroud)

也是python 3中的Unicode对象

python unicode

8
推荐指数
1
解决办法
1535
查看次数

为什么sys.getdefaultencoding()与sys.stdout.encoding不同?它如何破坏Unicode字符串?

我花了几个小时的时间来寻找Unicode字符串的问题,这些字符串被分解为Python(2.7)隐藏的东西,我仍然不明白.首先,我尝试u".."在我的代码中使用一致的字符串,但这导致臭名昭着UnicodeEncodeError.我尝试过使用.encode('utf8'),但这也无济于事.最后,事实证明我不应该使用任何一个,它都可以自动完成.然而,我(这里我需要赞扬一位帮助过我的朋友)确实注意到一些奇怪的事情,同时我的头靠在墙上.sys.getdefaultencoding()返回ascii,同时sys.stdout.encoding返回UTF-8.1.在下面的代码中工作正常,没有任何修改sys和2.提出一个UnicodeEncodeError.如果我更改默认的系统编码 reload(sys).setdefaultencoding("utf8"),那么2.工作正常.我的问题是为什么两个编码变量首先是不同的,如何在这段简单的代码中设法使用错误的编码?请不要把我发送到Unicode HOWTO,我已经在很多问题中看到了这一点UnicodeEncodeError.

#  -*- coding: utf-8 -*-
import sys


class Token:
    def __init__(self, string, final=False):
        self.value = string
        self.final = final

    def __str__(self):
        return self.value

    def __repr__(self):
        return self.value

print(sys.getdefaultencoding())
print(sys.stdout.encoding)

# 1.
myString = "I need 20 000€."
tok = Token(myString)
print(tok)

reload(sys).setdefaultencoding("utf8")

# 2.
myString = u"I need 20 000€."
tok = Token(myString)
print(tok)
Run Code Online (Sandbox Code Playgroud)

python stdout utf sys

8
推荐指数
1
解决办法
6131
查看次数

Python中使用Tesseract OCR的UnicodeDecodeError

我试图使用Python中的Tesseract OCR从图像文件中提取文本,但我面临一个错误,我可以弄清楚如何处理它.所有我的环境都很好,因为我在python中使用ocr测试了一些示例图像!

这是代码

from PIL import Image
import pytesseract
strs = pytesseract.image_to_string(Image.open('binarized_image.png'))

print (strs)
Run Code Online (Sandbox Code Playgroud)

以下是我从eclipse控制台获得的错误

strs = pytesseract.image_to_string(Image.open('binarized_body.png'))
  File "C:\Python35x64\lib\site-packages\pytesseract\pytesseract.py", line 167, in image_to_string
    return f.read().strip()
  File "C:\Python35x64\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 20: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)

我在Windows10上 使用python 3.5 x64

python tesseract python-tesseract

6
推荐指数
1
解决办法
5454
查看次数