相关疑难解决方法(0)

UnicodeEncodeError:'ascii'编解码器无法对位置20中的字符u'\ xa0'进行编码:序数不在范围内(128)

我在处理从不同网页(在不同网站上)获取的文本中的unicode字符时遇到问题.我正在使用BeautifulSoup.

问题是错误并不总是可重现的; 它有时适用于某些页面,有时候,它会通过抛出一个UnicodeEncodeError.我已经尝试了几乎所有我能想到的东西,但是我没有找到任何可以持续工作的东西而不会抛出某种与Unicode相关的错误.

导致问题的代码部分之一如下所示:

agent_telno = agent.find('div', 'agent_contact_number')
agent_telno = '' if agent_telno is None else agent_telno.contents[0]
p.agent_info = str(agent_contact + ' ' + agent_telno).strip()
Run Code Online (Sandbox Code Playgroud)

以下是运行上述代码段时在SOME字符串上生成的堆栈跟踪:

Traceback (most recent call last):
  File "foobar.py", line 792, in <module>
    p.agent_info = str(agent_contact + ' ' + agent_telno).strip()
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

我怀疑这是因为某些页面(或更具体地说,来自某些站点的页面)可能被编码,而其他页面可能是未编码的.所有这些网站都位于英国,并提供供英国消费的数据 - 因此,没有与内部化或处理用英语以外的任何文字处理的文本相关的问题.

有没有人有任何想法如何解决这个问题,以便我可以一致地解决这个问题?

python unicode beautifulsoup python-2.x python-unicode

1222
推荐指数
24
解决办法
156万
查看次数

如何修复:"UnicodeDecodeError:'ascii'编解码器无法解码字节"

as3:~/ngokevin-site# nano content/blog/20140114_test-chinese.mkd
as3:~/ngokevin-site# wok
Traceback (most recent call last):
File "/usr/local/bin/wok", line 4, in
Engine()
File "/usr/local/lib/python2.7/site-packages/wok/engine.py", line 104, in init
self.load_pages()
File "/usr/local/lib/python2.7/site-packages/wok/engine.py", line 238, in load_pages
p = Page.from_file(os.path.join(root, f), self.options, self, renderer)
File "/usr/local/lib/python2.7/site-packages/wok/page.py", line 111, in from_file
page.meta['content'] = page.renderer.render(page.original)
File "/usr/local/lib/python2.7/site-packages/wok/renderers.py", line 46, in render
return markdown(plain, Markdown.plugins)
File "/usr/local/lib/python2.7/site-packages/markdown/init.py", line 419, in markdown
return md.convert(text)
File "/usr/local/lib/python2.7/site-packages/markdown/init.py", line 281, in convert
source = unicode(source)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position …
Run Code Online (Sandbox Code Playgroud)

python python-2.7 chinese-locale

428
推荐指数
13
解决办法
86万
查看次数

更改Python的默认编码?

当我从控制台运行我的应用程序时,我有很多"无法编码"和"无法解码"的Python问题.但是在Eclipse PyDev IDE中,默认字符编码设置为UTF-8,我很好.

我四处搜索设置默认编码,人们说Python sys.setdefaultencoding在启动时删除了该功能,我们无法使用它.

那么什么是最好的解决方案呢?

python console encoding utf-8

127
推荐指数
8
解决办法
26万
查看次数

SQLite,python,unicode和非utf数据

我开始尝试使用python在sqlite中存储字符串,并得到消息:

sqlite3.ProgrammingError:除非使用可解释8位字节串的text_factory(如text_factory = str),否则不得使用8位字节串.强烈建议您只需将应用程序切换为Unicode字符串.

好的,我切换到Unicode字符串.然后我开始收到消息:

sqlite3.OperationalError:无法使用文本'SigurRós'解码为UTF-8列'tag_artist'

尝试从数据库中检索数据时.更多的研究和我开始在utf8编码,但随后'SigurRós'开始看起来像'SigurRós'

注意: @John Machin指出,我的控制台设置为'latin_1'显示.

是什么赋予了?在阅读完这篇文章后,描述了我所处的完全相同的情况,似乎建议忽略其他建议并且毕竟使用8位字节串.

在开始这个过程之前,我对unicode和utf了解不多.我在过去的几个小时里学到了很多东西,但我仍然不知道是否有办法正确地将'ó'从latin-1转换为utf-8而不是破坏它.如果没有,为什么sqlite'强烈推荐'我将我的应用程序切换到unicode字符串?


我将用最后24小时内学到的所有内容的摘要和一些示例代码来更新这个问题,以便我的鞋子里的人可以有一个简单的(呃)指南.如果我发布的信息有任何错误或误导,请告诉我,我会更新,或者你们中的一个高级人员可以更新.


答案摘要

让我首先说明我理解的目标.处理各种编码的目标,如果您尝试在它们之间进行转换,则要了解源编码是什么,然后使用该源编码将其转换为unicode,然后将其转换为所需的编码.Unicode是基础,编码是该基础的子集的映射.utf_8为unicode中的每个字符都有空间,但由于它们与例如latin_1不在同一个地方,因此以utf_8编码并发送到latin_1控制台的字符串将不会像您期望的那样.在python中,获取unicode和进入另一个编码的过程如下:

str.decode('source_encoding').encode('desired_encoding')
Run Code Online (Sandbox Code Playgroud)

或者如果str已经是unicode

str.encode('desired_encoding')
Run Code Online (Sandbox Code Playgroud)

对于sqlite我实际上并不想再次编码,我想解码它并保持unicode格式.当您尝试在python中使用unicode和编码时,您可能需要注意以下四件事.

  1. 要使用的字符串的编码,以及要将其转换为的编码.
  2. 系统编码.
  3. 控制台编码.
  4. 源文件的编码

阐述:

(1)当您从源读取字符串时,它必须具有一些编码,如latin_1或utf_8.在我的情况下,我从文件名中获取字符串,所以不幸的是,我可以获得任何类型的编码.Windows XP使用UCS-2(Unicode系统)作为其本机字符串类型,这似乎是在欺骗我.对我来说幸运的是,大多数文件名中的字符不会由多个源编码类型组成,我认为我的全部都是完全latin_1,完全是utf_8,或者只是简单的ascii(这是两者的子集)那些).所以我只是阅读它们并将它们解码,就像它们仍处于latin_1或utf_8一样.但是,有可能你可以将latin_1和utf_8以及在Windows上的文件名中混合在一起的任何其他字符.有时这些角色可以显示为框,有时它们看起来很糟糕,有时它们看起来是正确的(重音符号等等).继续.

(2)Python有一个默认的系统编码,在python启动时设置,在运行时不能更改.详情请见此处.脏的总结...这里是我添加的文件:

\# sitecustomize.py  
\# this file can be anywhere in your Python path,  
\# but it usually goes in ${pythondir}/lib/site-packages/  
import sys  
sys.setdefaultencoding('utf_8')  
Run Code Online (Sandbox Code Playgroud)

此系统编码是在没有任何其他编码参数的情况下使用unicode("str")函数时使用的编码.换句话说,python试图根据默认的系统编码将"str"解码为unicode.

(3)如果您正在使用IDLE或命令行python,我认为您的控制台将根据默认的系统编码显示.我出于某种原因使用带有eclipse的pydev,所以我必须进入我的项目设置,编辑测试脚本的启动配置属性,转到Common选项卡,然后将控制台从latin-1更改为utf-8,以便我可以直观地确认我在做什么工作.

(4)如果你想要一些测试字符串,例如

test_str = "ó"
Run Code Online (Sandbox Code Playgroud)

在你的源代码中,你必须告诉python你在该文件中使用了什么样的编码.(仅供参考:当我输入错误编码时,我必须使用ctrl-Z,因为我的文件变得不可读.)这可以通过在源代码文件的顶部放置一行来实现:

# -*- coding: utf_8 -*-
Run Code Online (Sandbox Code Playgroud)

如果您没有此信息,python会尝试默认将您的代码解析为ascii,因此:

SyntaxError: Non-ASCII character '\xf3' in file _redacted_ on line 81, but no encoding declared; …
Run Code Online (Sandbox Code Playgroud)

python sqlite unicode utf-8 python-2.x

65
推荐指数
4
解决办法
5万
查看次数

UnicodeEncodeError:'ascii'编解码器无法以特殊名称对字符进行编码

我的python(ver 2.7)脚本运行良好,从本地html文件中获取一些公司名称,但是当涉及到某个特定的国家/地区名称时,它会出现此错误"UnicodeEncodeError:'ascii'compodec无法编码字符"

当这个公司名称出现时特别收到错误

公司名称:KühlfixKälteanlagenIng.GerhardDoczekal&Co.KG

该链接无法处理

Traceback (most recent call last): 
  File "C:\Python27\Process2.py", line 261, in <module>
    flog.write("\nCompany Name: "+str(pCompanyName))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 9: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

错误在这行代码中给出:

if companyAlreadyKnown == 0:
   for hit in soup2.findAll("h1"):
       print "Company Name: "+hit.text
       pCompanyName = hit.text
       flog.write("\nCompany Name: "+str(pCompanyName))
       companyObj.setCompanyName(pCompanyName)
Run Code Online (Sandbox Code Playgroud)

python unicode encoding ascii beautifulsoup

64
推荐指数
2
解决办法
13万
查看次数

sys.setdefaultencoding('utf-8')的危险

sys.setdefaultencoding('utf-8')在Python 2中存在令人沮丧的设置趋势.任何人都可以列出问题的真实例子吗?论证喜欢it is harmfulit hides bugs听起来不太令人信服.

更新:请注意,这个问题只是关于utf-8,它不是关于改变默认编码"一般情况下".

如果可以,请举一些代码示例.

python encoding utf-8 python-2.x

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

将一个段落标记为句子,然后将其转换为NLTK中的单词

我试图将整个段落输入到我的文字处理器中,先将其分成句子然后再分成单词.

我尝试了以下代码,但它不起作用,

    #text is the paragraph input
    sent_text = sent_tokenize(text)
    tokenized_text = word_tokenize(sent_text.split)
    tagged = nltk.pos_tag(tokenized_text)
    print(tagged)
Run Code Online (Sandbox Code Playgroud)

但这不起作用,给我错误.那么如何将段落标记为句子然后单词呢?

一个示例段落:

这件事似乎压倒了这只小黑褐色的狗,使他受伤了.他在孩子脚下绝望地沉了下去.当重复一击,伴随着幼稚的句子中的警告,他转过身来,以一种特殊的方式握住他的爪子.在他的耳朵和眼睛的同时,他向孩子祈祷.

**警告:**这只是来自互联网的随机文本,我不拥有上述内容.

python nltk

31
推荐指数
3
解决办法
5万
查看次数

Pandas df.to_csv("file.csv"encode ="utf-8")仍为减号提供垃圾字符

我已经阅读了关于Pandas'to_csv(......等等)的Python 2限制的内容.我打了吗?我在使用Python 2.7.3

当它们出现在字符串中时,这会产生≥和 - 的垃圾字符.除此之外,出口是完美的.

df.to_csv("file.csv", encoding="utf-8") 
Run Code Online (Sandbox Code Playgroud)

有没有解决方法?

df.head()是这样的:

demography  Adults ?49 yrs  Adults 18?49 yrs at high risk||  \
state                                                           
Alabama                 32.7                             38.6   
Alaska                  31.2                             33.2   
Arizona                 22.9                             38.8   
Arkansas                31.2                             34.0   
California              29.8                             38.8  
Run Code Online (Sandbox Code Playgroud)

csv输出就是这个

state,  Adults ≥49 yrs,   Adults 18−49 yrs at high risk||
0,  Alabama,    32.7,   38.6
1,  Alaska, 31.2,   33.2
2,  Arizona,    22.9,   38.8
3,  Arkansas,31.2,  34
4,  California,29.8, 38.8
Run Code Online (Sandbox Code Playgroud)

整个代码是这样的:

import pandas
import xlrd
import csv
import json

df = pandas.DataFrame()
dy = …
Run Code Online (Sandbox Code Playgroud)

python csv utf-8 pandas

25
推荐指数
1
解决办法
4万
查看次数

将int值转换为unicode

我正在使用pyserial并需要发送一些小于255的值.如果我发送int本身,则发送int的ascii值.所以现在我将int转换为unicode值并通过串口发送.

unichr(numlessthan255);

However it throws this error:
'ascii' codec can't encode character u'\x9a' in position 24: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

什么是将int转换为unicode的最佳方法?

python ascii character-encoding pyserial

20
推荐指数
4
解决办法
6万
查看次数

在Python unicode字符串中处理错误编码的字符

我正在处理python-lastfm库返回的unicode字符串.

我假设在某个地方,库得到编码错误并返回一个可能包含无效字符的unicode字符串.

例如,我期望变量a中的原始字符串是"Glück"

>>> a
u'Gl\xfcck'
>>> print a
Traceback (most recent call last):
  File "", line 1, in 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 2: ordinal not in range(128)

\ xfc是转义值252,它对应于"ü"的latin1编码.不知怎的,它以一种python无法独立处理的方式嵌入到unicode字符串中.

如何将此转换为包含原始"Glück"的普通或unicode字符串?我尝试使用解码/编码方法,但要么得到了一个UnicodeEncodeError,要么是一个包含序列\ xfc的字符串.

python string unicode character-encoding

17
推荐指数
2
解决办法
4万
查看次数