首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制python函数使用UTF-8

如何强制python函数使用UTF-8
EN

Stack Overflow用户
提问于 2013-03-27 20:45:38
回答 2查看 3.3K关注 0票数 1

我对python函数os.path.isdir有问题

当我尝试使用它时,我得到了:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 36: ordinal not in range(128)

我已经在我的文件#!/usr/bin/env python # coding: utf-8的头中放置了编码"stamp“

我还使用了相当适当的字符串解码,可以获得utf-8符号(我通过QT QLineEdit加载它们-但这并不重要)。

代码语言:javascript
复制
tmp_filepath = u''
tmp_filepath = tmp_filepath.decode('utf-8')
tmp_filepath += QtGui.QFileDialog.getExistingDirectory(self,"Choose directory",self.directorypath,QtGui.QFileDialog.ShowDirsOnly)

在我尝试使用os.path.isdir(tmp_filepath)时出现问题

我读到这可能是由糟糕的python版本(非utf-8)引起的,但我找不到有关这方面的其他信息。我在Linux Ubuntu 10.04上使用python 2.6.5。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-27 21:33:17

isdir希望将其参数转换为字节序列(str),因为底层文件系统使用字节序列作为文件名。如果您提供一个字符串(unicode),它必须以某种方式对其进行编码。

它使用与print命令相同的编码规则。尝试打印tmp_filepath,您可能会得到相同的异常。

要解决此问题,请(a)设置您的语言环境(例如,环境中的LANG=en_US.utf-8 )或(b)将tmp_filename.encode('utf-8')传递给isdir和mkdir。

我推荐(a)。

票数 3
EN

Stack Overflow用户

发布于 2013-03-27 21:25:06

Qt返回一个QString对象--您必须将其转换为Python unicode,并将其编码为utf-8:

代码语言:javascript
复制
 tmp_filepath = unicode(tmp_filepath)
 os.path.isdir(tmp_filepath.encode("utf-8"))

另外,在今天继续编程之前,请先阅读http://www.joelonsoftware.com/articles/Unicode.html

或者,如果您不必与Python中的其他文本变量进行互操作,则QString对象本身提供了.toUtf8方法:

代码语言:javascript
复制
os.path.isdir(tmp_filepath.toUtf8()) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15659133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档