修复由另一种语言引起的Python Unicode错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了修复由另一种语言引起的Python Unicode错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2122字,纯文字阅读大概需要4分钟。
内容图文
![修复由另一种语言引起的Python Unicode错误](/upload/InfoBanner/zyjiaocheng/826/d75be40845b04456bafa40224e573e21.jpg)
我收到这个错误:
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 52-57: ordinal not in range(128)
导致错误的代码:
f.write(textwrap.dedent(unicode(the_string))
我想写的字符串摘自一个网站,其中包含英语和日语(用于测试)外语单词和名称的音译,例如コンピュータ(konpyūta,“computer”)和ロンドン(Rondon,“London”). (一些已归化的外国借款可能不会以片假名呈现.)
在Python中处理字符串时使用另一种语言(日语).我如何解析这个以防止错误仍然保留字符串?
解决方法:
这里的问题是文件对象的.write方法天真地尝试转换unicode字符串(如果你在Python 2.x中,这将是unicode类型),你将它传递给字节字符串(如果你在Python 2.x中,这将是str类型)使用ASCII编解码器,但是你传递的unicode字符串不能用ASCII表示,因为它有(日语)字符不是ASCII字符集的一部分.
您需要使用unicode字符串的.encode方法将其转换为表示该字符串的一系列字节,然后才能保存它.这基本上是str类型在Python 2.x中表示的 – 只是一系列字节,而不是你可能期望的一系列字符.但是Python很容易让你思考,因为当你打印str类型的变量时,Python会使用系统的默认unicode编码将它显示为终端中的一系列字符.
您应该使用什么编码来编码字符串取决于您的用例. UTF-8是最常见的,你可能只想使用它,但如果你想确保你写的文件将在同一系统的文本编辑器中正确显示,即使你在一个设备上运行它一个不太常见的系统编码,如UTF-16,您可能希望使用系统的默认编码(如果系统具有无法对您的字符串进行编码的默认编码,这当然会失败).
换句话说,您几乎肯定想要做以下事情之一:
一个)
f.write(textwrap.dedent(the_string).encode( ‘UTF-8’))
b)
import sys
f.write(textwrap.dedent(the_string).encode(sys.getdefaultencoding()))
如果你认为这是一个相当恼人和复杂的东西,让你的头脑执行相当基本的任务,写一些非ASCII文本到文件,那么 – 我同意你的意见!当我开始使用Python(这是我的第一个编程语言)时,我在理解unicode,字符串编码以及与之相关的Python类型和方法方面遇到了很多困难.然而,复杂性不是Python的错 – 它取决于计算机对文本进行编码的方式,特别是对文本进行多种编码的事实.不同的字节序列可以表示相同的字符序列,具体取决于正在使用的编码.这使得Python不可能只隐藏你的字符串编码的细节和“像我一样自动做一些明智的事情”,作为一个新手,天真的希望和预期.
如果您要编写任何涉及从Web上获取和使用可能包含非ASCII字符的文本数据的大量代码,我建议您仔细阅读本主题,并从中深入了解它一般和Python特定的观点.
内容总结
以上是互联网集市为您收集整理的修复由另一种语言引起的Python Unicode错误全部内容,希望文章能够帮你解决修复由另一种语言引起的Python Unicode错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。