- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
设置非拉丁语言环境时,IOError.strerror
对我来说在 Python 2.7 中变为非 Unicode:
import locale
locale.setlocale(locale.LC_ALL, '')
print locale.getlocale(locale.LC_MESSAGES)
try:
open('/asdasd', 'w')
except IOError as e:
print e.strerror
print repr(e.strerror)
print unicode(e) # boom
运行:
LANG=fr_FR.utf8 python test.py
输出:
('fr_FR', 'UTF-8')
Permission non accordée
'Permission non accord\xc3\xa9e'
Traceback (most recent call last):
File "test.py", line 11, in <module>
print unicode(e)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 32: ordinal not in range(128)
看起来操作系统错误消息按原样存储在 strerror
中,没有先转换为 Unicode。是否可以在不手动解码每个 Exception
的情况下解决这个问题?
最佳答案
我不确定这会是一个很好的答案,但是:
Python 2 有一些地方(异常(exception)是其中之一)“文本”和“字节”之间的区别不是很清楚。实际上,在 Python 2 中,我见过的异常中的每个字符串都是 str
或 bytes
。 (并不是说自定义库不能返回 unicode
,而是标准的 Python 东西不能。)因此,您将系统错误视为 str
/字节
。您可以将最后一行(# boom
)更改为:
print unicode(str(e), 'utf-8')
或者,如我所愿,
print str(e).decode('utf-8')
现在,'utf-8'
在这里是一个神奇的常量:它必须匹配语言环境(对于 fr_FR.utf8
,它匹配。对于其他,非 UTF-8 语言环境,它可能不会。)locale.getpreferredencoding()
,我相信,会给你正确的答案,因此:
print str(e).decode(locale.getpreferredencoding())
隧道尽头有光:在 Python 3 中,您发布的代码应该 ¹ Just Work。 (对典型的 Py3k 进行微小改动 — print()
是一个函数,而 unicode
需要是 str
。)
¹我可以让它与 fr_FR.utf-8 一起使用,但不能与 fr_FR.ISO-8859-1 一起使用。不知道为什么。后一种编码适用于 Python 2。Python 3 运行我提到的修改,但似乎只是完全放弃了重音。
关于Python IOError.strerror 不是 Unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18397572/
请解释以下程序中发生了什么。 我在程序的开头和结尾检查了 strerror(errno) 返回的地址,并确认它每次都返回相同的地址。然后一旦确定这一点,在第一种情况下我继续将相同的地址分配给 ptr,
我正在尝试创建类似 this 的函数它将打印出与其错误编号相关的错误详细信息,但我收到错误 error: expected initializer before 'strerror'。这是代码 #in
C 函数strerror 返回错误描述字符串,详见here .示例字符串 No such file or directory 问题是这些字符串在哪里定义的?我查看了我的头文件,但没有看到任何东西。 最
我正在将一些代码移植到 Windows,Microsoft 编译器 (Visual C++ 8) 告诉我 strerror() 不安全。 撇开微软提供的所有安全字符串中的烦恼因素不谈,我实际上可以看到
考虑到 fopen() 失败,在下面的代码中: FILE *fp = fopen("file.txt", "w"); if (fp == NULL) { printf("Error occur
有没有strerror -当前内核中的类似功能?我一直没能找到,所以我的想法是没有,但更重要的是,他们有没有讨论过这个问题?我认为它可以减少故障排除时间,因为您不必查找错误代码(不是每个人都记住)并且
我的代码如下: #include #include #include int test(const char *fmt, ...); int main(void) { int i
设置非拉丁语言环境时,IOError.strerror 对我来说在 Python 2.7 中变为非 Unicode: import locale locale.setlocale(locale.LC_
据我了解,strerror(errno)返回对应于 errno 的错误的字符串形式.在这种情况下,我是否需要在使用完函数后释放函数的返回结果? 最佳答案 你不仅不需要;你绝不能 .唯一可以传递给fre
我刚刚浏览了 C99 标准,寻找一些我现在不记得的东西,当我注意到从 strerror() 函数(第 7.12.6.2 节)返回的指针不是t const 限定,即使标准说: The strerror
采用这个简单的程序 #include #include #include int main (void) { printf ("ERROR %d %s\n", ETIMEDOUT, stre
在使用 CRT 函数(如 fopen())后,我可以使用 strerror() 获取 errno 值的文本表示。如果我使用 open() Linux 系统调用而不是 CRT 函数,它也会在失败时设置
在我的代码中的某些地方,我会像这样打印调试消息: int ret = getLinkSpeed(device.getSysName(), linkSpeed); if (ret < 0) {
我尝试过 RTM,但是:给定 ICU UErrorCode ,如何获取相应的错误信息字符串?即,ICU 相当于 strerror(3) . 最佳答案 const char *u_errorName(U
根据 Microsoft 文档,API char * strerror(int errnum) "maps errnum to an error-message string and returns
我正在使用谷歌应用引擎创建一个访问预测 API 的应用程序。当我在网站上更新它时,我能够运行该应用程序,但是我无法在 localhost:8080 上运行它。 我绝对是菜鸟,非常感谢任何帮助。 这是错
我正在使用 Visual Studio 2013 和 ITK 4.3 进行图像分割,但出现错误: \itk4.3.1-64bit\debug\include\itk-4.3\gdcmVR.h(168)
我已经成功cross-compiled the Apache Portable Runtime (APR) for the iPhone ,使用一组 configure scripts使用必要的交叉编
我尝试通过 native 方法访问 android 中的文件,但在调用读取或写入函数后出现“无效参数”。 data_ptr 对齐到 512 字节,它在 java 中声明为字节数组。 JNIEXPORT
我是一名优秀的程序员,十分优秀!