python字符编码pc mac

时间:2017-10-10 22:00:48

标签: python windows macos character-encoding

我确实不熟悉字符编码问题。 我编写了一个脚本,它使用os.path.isfile()在继续之前检查路径是否是文件。

在Macos Python 2.7.10上,我没有遇到任何问题,但我只是尝试在Python10上第一次在Windows10上使用该脚本,然后遇到isfile()在肯定是文件的路径上返回false ,并在Macos上被认可。

调查,我发现一个违规文件在Macos上与os.listdir()的列表与在Windows10上列出的不同。它有一个特殊的特性,下面是两个操作系统上如何复制特殊字符:

PC:'\ uf022' Macos:'\ xef \ x80 \ xa2'

我认为这与os.path.isfile()不喜欢该文件的Windows10表示的原因相关。为了测试这个,我在Windows10上做了以下几点:

  • 将目录更改为文件目录
  • 启动交互式python shell
  • import os
  • 执行os.listdir()
  • 执行os.path.isfile(文件名完全与os.listdir一样列出

返回FALSE。 所以我很难过。任何帮助将不胜感激!

为了更加清晰,编辑以下内容在Windows10 Python 3.6.3上:

>>> files = os.listdir()
>>> files[5]
'1955 shark - Oz Huntly\uf022Noel.jpg'

>>> os.path.isfile( files[5] ) 
FALSE

>>> os.stat( files[5] )
FileNotFoundError: [WinError 2] The system cannot find the file specified: 
'1955 shark - Oz Huntly\uf022Noel.jpg'

最后一条线索,这可能与Python无关。我尝试通过资源管理器复制文件,看起来操作系统本身无法找到它明确表示存在的文件,完整的文件大小和其他各种元数据。只有具有这个特殊字符的两个文件才会使Windows失眠...看起来这并不是严格来说似乎是一个Python问题,请随意忽略/移动这个问题....

编辑 - 正如Eryksun在评论中指出的:这可能是我用来允许Windows10读取HFS +格式化驱动器的Paragon HFS +驱动程序的错误。我把它传给了Paragon。谢谢你的帮助Eryksun!

一切顺利, 马尔科姆

1 个答案:

答案 0 :(得分:0)

我太新了,无法帮助那些帮助阐明这一点的人。 Eryksun在评论中指出了一个可能的答案:这可能是我用来允许Windows10读取和写入HFS +格式化驱动器的Paragon HFS +驱动程序的错误。他比我更好地解释了他的想法,但基本上如果驱动程序代码在创建文件的打开请求时遇到非零状态,那么可能会映射到Windows''找不到文件'错误,因此阻止访问文件实际上是有效的。特殊字符U + F022可能会在文件打开过程中导致非零状态。 如果您觉得这个答案有用,请在评论中提升Eryksun。