【问题标题】:Print special character from utf-8 encoded string从 utf-8 编码的字符串中打印特殊字符
【发布时间】:2017-05-15 09:30:04
【问题描述】:

我在处理 Python 中的编码时遇到了问题:

我从使用 pandas.read_csv() 打开的 csv 中获取了一些字符串,它们以 unicode 编码,因此我将其编码为 utf-8,执行以下操作

# data is from my csv
string = data.encode('utf-8')
print string

但是,当我打印它时,我得到了

"Parc d'Activit\xc3\xa9s des Gravanches"

我想回来

"Parc d'Activités des Gravanches"

这似乎是一个简单的问题,但我对 python 很陌生,没有找到任何与我的问题足够接近的东西。

注意:我使用的是 Python 2.7,我的文件以

开头
#!/usr/bin/env python2.7
# coding: utf8

【问题讨论】:

  • 在代码开头添加# -*- coding: utf-8 -*- 并重试
  • @Nuageux 这不会解决任何问题 - 它只会告诉 Python 如何使用模块处理字符串。
  • 我已经有# coding: utf8,它的工作原理相同,我仍然尝试使用 -*- 但它没有改变任何东西
  • 这是 Python 2 还是 Python 3 ?你的文件是怎么打开的?并请发布您“打印”字符串的确切代码。

标签: python-2.7 pandas unicode utf-8 character-encoding


【解决方案1】:

编辑:我只是说您使用的是 Python 2,好吧,我认为下面的答案仍然很有价值。

在 Python 2 中,这更加复杂和不一致。这里有strunicode,默认的str 不支持unicode 的东西。

反正情况差不多,用decode代替encodestr转换成unicode。那应该可以解决它。

更多信息请访问:https://pythonhosted.org/kitchen/unicode-frustrations.html


这是一个常见的混淆来源。这个问题有点复杂,但我会尽量简化它。我这里说的是 Python 3,我相信与 Python 2 有几个不同。

有两种类型的字符串:strbytes

str 是 Python 的通用字符串类型,它在 Python 3 中无缝支持 unicode,但它对实际数据的编码方式无关紧要,它是一个对象。

bytes 是一个字节数组,就像 C 中的 char*。它是一个字节序列。

字符串可以以两种方式表示,但您需要指定一个编码标准以在两者之间进行转换,因为bytes 需要被解释,因为它只是一个原始的字节数组。

encodestr 转换为bytes,这是你犯的错误。当然,如果你打印bytes,它只会显示它的原始数据,也就是编码为 utf-8 的字符串。

decode 做相反的操作,这可能是你需要的。

但是,如果您正常打开文件 (open(file_name, 'r')) 而不是以字节模式 (open(file_name, 'b'),我怀疑您正在这样做,您不需要做任何事情,打印 data 应该就可以了随心所欲。

更多信息请访问:https://docs.python.org/3/howto/unicode.html

【讨论】:

  • 您知道您传递的参数的名称,以便我可以查看文档是否可以将其应用于 pandas.read_csv()?我正在考虑'index = ''header = ' 之类的事情对我来说不再是真正的问题,但我很想知道。
  • 即使问题解决了,如果您借此机会学习它可能会很有趣。我已经使用 Python 2 信息编辑了我的帖子。
猜你喜欢
  • 2019-07-22
  • 2020-09-20
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 2011-02-21
  • 2010-11-25
  • 1970-01-01
相关资源
最近更新 更多