gpt4 book ai didi

Python os.stat 和 unicode 文件名

转载 作者:太空狗 更新时间:2023-10-29 16:56:29 25 4
gpt4 key购买 nike

在我的 Django 应用程序中,用户上传了一个名称中包含 unicode 字符的文件。

当我下载文件时,我正在调用:

os.path.exists(media)

测试文件是否存在。反过来,这似乎在呼唤

st = os.stat(path)

然后出现错误:

UnicodeEncodeError: 'ascii' 编解码器无法对位置 92 中的字符 u'\xcf' 进行编码:序号不在范围内 (128)

我该怎么办?是否有 path.exists 选项来处理它?<​​/p>

更新:实际上,我所要做的就是将参数编码为存在,即。

os.path.exists(media.encode('utf-8')

感谢所有回答的人。

最佳答案

我假设您使用的是 Unix。如果不是,请记得说明您使用的是哪个操作系统。

确保您的区域设置为 UTF-8。所有现代 Linux 系统都默认执行此操作,通常是将环境变量 LANG 设置为“en_US.UTF-8”或其他语言。此外,请确保您的文件名以 UTF-8 编码。

有了这个集合,即使在 Python 2.x 中,也无需混淆编码即可访问任何语言的文件。

[~/test] echo $LANG
en_US.UTF-8
[~/test] echo testing > 漢字
[~/test] python2.6
Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.stat("漢字")
posix.stat_result(st_mode=33188, st_ino=548583333L, st_dev=2049L, st_nlink=1, st_uid=1000, st_gid=1000, st_size=8L, st_atime=1263634240, st_mtime=1263634230, st_ctime=1263634230)
>>> os.stat(u"漢字")
posix.stat_result(st_mode=33188, st_ino=548583333L, st_dev=2049L, st_nlink=1, st_uid=1000, st_gid=1000, st_size=8L, st_atime=1263634240, st_mtime=1263634230, st_ctime=1263634230)
>>> open("漢字").read()
'testing\n'
>>> open(u"漢字").read()
'testing\n'

如果这不起作用,运行“locale”;如果值为“C”而不是 en_US.UTF-8,则您可能没有正确安装语言环境。

如果您使用的是 Windows,我认为 Unicode 文件名应该始终有效(至少对于 os/posix 模块),因为 Windows 中的 Unicode 文件 API 是透明支持的。

关于Python os.stat 和 unicode 文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2076708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com