似乎有一百万个问题涉及 Python Unicode 错误,其中 ...ordinal [is] not in range(128)。看起来,绝大多数都涉及 Python 2.x。
我知道这些错误,因为我目前正处于编码、解码的 hell 中。对于一个副项目,我抓取网页并尝试规范化该文本数据,这样它就不会出现在我们的网站上,带有疯狂的字符。为了规范化数据,我依靠 HTMLParser 的 HTMLParser() 和 entitydefs,以及从文本的原始形式(string.decode(' [原始编码]', 'ignore')) 并将其编码为 UTF-8 (string.encode('utf-8', 'ignore'))。
然而,似乎总有一个网站我的最大努力失败了,引发了同样的旧UnicodeError:ASCII解码错误...序号不在范围内(128)。这太烦人了。
我读过(here 和 here),在 Python 3 中所有文本都是 Unicode。虽然我已经阅读了很多关于 Unicode 的文章,但因为我不是软件工程师,所以我不知道 Unicode 是否在客观上比 2.x 的默认 ascii 编码选项更好(即故障率更低)。我不得不认为任何事情都会更好,但我希望更专业和更有经验的人能提供一些观点。
我想知道我是否应该迁移到 Python 3,因为它(改进了)对从网络上抓取的文本的处理。我希望这里有人可以解释(或建议解释的资源)Python 3 文本处理方法的优缺点。这个会比较好吗??有没有人处理过我已经迁移到 Python 3 的同样问题?如果 2to3 迁移不是问题,他/她会建议我开始使用 Python 3 吗??
提前感谢您的帮助。我当然需要它。
最佳答案
我将从 Python 2.7 用户的角度来谈。
确实,Python 3 在 Unicode 字段上引入了一些重大变化。我不会说在 Python 3 中使用 encodings 更容易,但它确实更适合做 i18n 的事情。
正如我所说,我使用 Python 2.7,到目前为止,我已经能够处理我发现的每个 encoding 问题。您只需要了解幕后发生的事情,并且对 encodings 的含义有一个非常合理的背景,当然:this is the best article there is to understand encodings .
在那篇文章中,Joel 说了一些您需要记住的事情每当您遇到编码 情况时:
It does not make sense to have a string without knowing what encoding it uses.
话虽如此,我对使用 Python 2.7 解决您的问题的建议是这样的:
编码(您可以通过查看响应 header 或BeautifulSoup中的字段来感知这一点..decode() 使用您计算出的编码检索到的字符串解码时,您不再有str 对象,您有一个unicode 对象。unicode 只是一种内部表示,不是真正的编码,所以如果你想将内容输出到某个地方,你将不得不 .encode() 它并且我建议你当然使用utf-8。现在,必须了解一些要点。也许您正在抓取的网页不是编码感知,并且它说它使用了一些编码但没有坚持下去。这是网站管理员的错误,但您必须采取一些措施来解决这个问题。您有 3 个选择:
,ignore 可能有问题的字符。静静地让他们过去。encoding 格式错误时 要获得正确的编码,源代码和客户端需要一定程度的纪律。您必须正确开发您的程序,但您需要有关编码的信息与源代码中的实际编码相匹配。
Python 3 改进了它的 unicode 处理,但是如果您不明白发生了什么,它可能毫无用处。你能做的最好的事情就是理解 encodings(不是那么难,再一次,阅读 Joel!),一旦你理解了它,你就能够使用 Python 2.7、Python 3.3 和甚至 PHP ;)
希望这对您有所帮助!
关于python - Python 3.3 是否比 2.7 更好地解码和重新编码已抓取的 Web 文本为 UTF-8?比如,好多了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20555142/
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA
我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p