Python Unicode 编码错误序号不在带欧元符号的 <128> 范围内

标签 python unicode python-2.7 ascii

我必须用 Python 读取 XML 文件并抓取各种内容,我遇到了令人沮丧的 Unicode 编码错误,即使使用谷歌搜索我也无法弄清楚。

以下是我的代码片段:

#!/usr/bin/python
# coding: utf-8
from xml.dom.minidom import parseString
with open('data.txt','w') as fout:
   #do a lot of stuff
   nameObj = data.getElementsByTagName('name')[0]
   name = nameObj.childNodes[0].nodeValue
   #... do more stuff
   fout.write(','.join((name,bunch of other stuff))

当我正在解析的名称条目包含欧元符号时,这会严重崩溃。这是错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 60: ordinal not in range(128)

我明白为什么欧元符号会搞砸(因为它是 128,对吗?),但我认为执行 #coding:utf-8 可以解决这个问题。我还尝试添加 .encode(utf-8) 以便名称看起来像

name = nameObj.childNodes[0].nodeValue.encode(utf-8)

但这也行不通。我究竟做错了什么? (如果有人想知道,我正在使用 Python 2.7.3)

编辑:Python 在 fout.write() 行崩溃——它会在 name 字段的地方正常运行:

<name>United States, USD</name>

但会在名称字段上乱码,例如:

<name>France, € </name>

最佳答案

当您使用 open 内置函数在 python 中打开文件时,您将始终以 ascii 格式读取文件。要以另一种编码访问它,您必须使用编解码器:

import codecs
fout = codecs.open('data.txt','w','utf-8')

关于Python Unicode 编码错误序号不在带欧元符号的 <128> 范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15237702/

相关文章:

python - Lua 作为通用脚本语言?

python - 在 Python 中检查空文件或丢失文件的正确方法

python-2.7 - Python - 在用户的主目录中创建 .ini 或配置文件

Django - 在管理页面中显示 "Model Object"而不是对象标题

unicode - 在 Emacs 中突出显示和替换不可打印的 unicode 字符

python - ValueError : Input contains NaN, 无穷大或 dtype ('float64' 的值太大)

python - SQLAlchemy:选择多个表

python - 自动与python中的网页交互

python - 调整 matplotlib 注释框内的填充

unicode - 需要通过 UTF 等对 Unicode 字符进行编码吗?为什么我们不能简单地将它们存储为代码点的二进制?