当前位置: 首页 > 面试题库 >

python…使用linux时的编码问题>

薛云瀚
2023-03-14
问题内容

编码问题的简单测试程序:

#!/bin/env python
# -*- coding: utf-8 -*-
print u"Råbjerg"      # >>> unicodedata.name(u"å") = 'LATIN SMALL LETTER A WITH RING ABOVE'

这是我从debian命令箱中使用它时得到的信息,我不明白为什么在这里使用重定向会破坏该功能,因为当不使用它时我可以正确看到它。

有人可以帮助您了解我错过了什么吗?正确的方式来打印这些字符,以便在任何地方都可以使用?

$ html" target="_blank">python testu.py
Råbjerg

$ python testu.py > A
Traceback (most recent call last):
  File "testu.py", line 3, in <module>
    print u"Råbjerg"
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe5' in position 1: ordinal not in range(128)

使用配置有以下内容的debian Debian GNU / Linux 6.0.7(挤压):

$ locale
LANG=fr_FR.UTF-8
LANGUAGE=
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=

编辑:从其他类似的问题,稍后从下面完成的指向中看到

#!/bin/env python1
# -*- coding: utf-8 -*-
import sys, locale
s = u"Råbjerg"      # >>> unicodedata.name(u"å") = 'LATIN SMALL LETTER A WITH RING ABOVE'
if sys.stdout.encoding is None: # if it is a pipe, seems python2 return None
    s = s.encode(locale.getpreferredencoding())
print s

问题答案:

重定向输出时,sys.stdout未连接到终端,Python无法确定输出编码。当
定向输出时,Python可以检测到这sys.stdout是一个TTY,并且在打印unicode时将使用为此TTY配置的编解码器。

设置PYTHONIOENCODING环境变量以告诉Python在这种情况下应使用哪种编码,或显式编码。



 类似资料:
  • 我想把mathjax脚本添加到我的模板

  • 我有这样一个csv文件 我在读书

  • 我必须这么做 > 从pdf中提取文本,我大致使用了这个 缩放PDF 最后在pdf的每一页上写些东西。我使用此处提到的14种受支持字体之一https://pdfbox.apache.org/1.8/cookbook/workingwithfonts.html.在这种情况下,泰晤士报是新罗马的。 用做 由于公司原因,我忽略了签名和捕获块。我总是关闭内容流。 大多数情况下,经过处理的PDF文件在Chro

  • 本文向大家介绍解决python中使用PYQT时中文乱码问题,包括了解决python中使用PYQT时中文乱码问题的使用技巧和注意事项,需要的朋友参考一下 如题,解决Python中用PyQt时中文乱码问题的解决方法: 在中文字符串前面加上u,如u'你好,世界',其他网上的方法没有多去探究,Python的版本也会影响解决方法,故这里只推荐这种。 (有人说用toLocal8bit函数也可以,我试了下,貌似

  • 我正在使用JavaMail 1.4.1(我已经升级到1.4.5版本,但有同样的问题)从一个电子邮件帐户读取消息,但我在内容编码方面有问题: 一些消息被正确读取,但其他消息由于编码不合适而具有奇怪的字符。我意识到它不适用于特定的内容类型。 如果content entType是以下任何一个,它都能很好地工作: > 文本/普通;charset=ISO-8859-1 charset="iso-8859-1

  • 本文向大家介绍Python MySQLdb 使用utf-8 编码插入中文数据问题,包括了Python MySQLdb 使用utf-8 编码插入中文数据问题的使用技巧和注意事项,需要的朋友参考一下 最近帮伙计做了一个从网页抓取股票信息并把相应信息存入MySQL中的程序。 使用环境: Python 2.5 for Windows MySQLdb 1.2.2 for Python 2.5 MySQL 4