【问题标题】:Troubles in printing unicode string that I have in byte format打印字节格式的 unicode 字符串时遇到问题
【发布时间】:2018-04-22 14:19:12
【问题描述】:

从数据库中读取我得到以下值

b'd\xe2\x80\x99int'

如何打印得到字符串d’int(注意这与d'int不同)?

我尝试使用print(b'd\xe2\x80\x99int'.decode('utf-8')),但出现错误:

UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position 1: ordinal not in range(128)

编辑:感谢评论,我了解到问题不在我的 Python 代码中,而是在 emacs 中,我遇到的问题与此处描述的完全相同Unicode conversion issue using Python in Emacs

我将关闭问题

【问题讨论】:

  • 您的代码对我有效,没有错误。
  • @Nisba 我们如何重现您的错误?这行print(b'd\xe2\x80\x99int'.decode('utf-8')) 不会引发任何异常
  • 你说得对,在我的终端中它可以工作。如果我在 emacs 内的 shell 控制台上将其打印在文件中,我会在 emacs 中运行它时遇到错误。所以也许我在 emacs 中的 Python 进程必须被告知接受 unicode 字符串
  • @Nisba 将PYTHONIOENCODING env.var 设置为utf-8 在您的emacs 控制台或任何emacs 用于显示文本的python 进程上是否有任何区别?
  • 我正在尝试改变它的值

标签: python byte python-unicode


【解决方案1】:

您可以使用bytes.decode()

>>> bytes.decode(b'd\xe2\x80\x99int', 'utf8')
'd’int'

或类似地,字节对象本身的.decode() 方法:

>>> b'd\xe2\x80\x99int'.decode('utf-8')
'd’int'

【讨论】:

  • 谢谢,可惜问题不在代码中,见编辑
猜你喜欢
  • 1970-01-01
  • 2019-05-01
  • 1970-01-01
  • 2015-06-09
  • 2016-06-25
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多