[英]Convert windows-1251 directory names to unicode (using Python)
我使用php脚本创建了目录,使用的是从网站(utf-8)提取的单词(类别名称),但是创建这些目录时,我看到的是不可读的字符,而不是真实的单词。
Windows下的AFAIK PHP在cp1251
语言环境中有效,不能与utf-8
文件名/目录名一起使用。
所以问题是,是否可以使用Python遍历所有目录并将它们重命名为utf-8字符集?
看起来像那段代码有效,现在我只需要递归遍历目录并重命名所有目录即可。
basedir = "C:\\Users\\alex\\Desktop\\1\\save"
dirs = os.listdir(basedir)
for fn in dirs:
print fn
nn = fn.decode('utf-8')
os.rename(os.path.join(basedir,fn), os.path.join(basedir,nn))
需要澄清的几件事:
UTF-8是一种编码,而不是字符集。 字符集称为Unicode。 🎂
是该字符集中的字符128169。
字符串"🎂.txt"
包含5个字符 。 您可以使用UTF-8或UTF-16这样的编码将这些字符编码为字节 。 计算机存储字节,因此程序必须使用这些编码之一来内部表示该字符串。
结果,就没有“将目录重命名为Unicode字符集”之类的东西。 文件名🎂.txt
是这5个字符,而不管操作系统是如何将这些字符存储在磁盘上的。
问题是PHP本身。 在Windows上,PHP在本地ANSI代码页中对字符串进行内部编码。 该代码页可能无法编码的字符🎂
,所以PHP是不是能在内部表示此字符串。 结果,您将永远无法在PHP中访问文件🎂.txt
。 唯一的解决方法是使用特殊模块访问那些文件。 请参阅如何在PHP中打开名称为Unicode字符的文件? 。
如果php将utf-8文件名另存为cp1251,那么您可以将它们重新编码回去:
>>> correct_filename = u"торт.txt"
>>> mojibake = correct_filename.encode('utf-8').decode('cp1251') # WRONG
>>> print(mojibake) # if you see this;
торт.txt
>>> print(mojibake.encode('cp1251').decode('utf-8')) # recode
торт.txt
在Windows上,始终对文件名使用Unicode类型。
要重命名给定目录中的所有.txt
文件:
#!/usr/bin/env python2
import os
from glob import glob
dirpath = os.path.expanduser(ur"~\Desktop\1\save")
for mojibake_path in glob(os.path.join(dirpath, '*.txt')):
path = mojibake_path.encode('cp1251').decode('utf-8')
os.rename(mojibake_path, path)
注意: dirpath
是Unicode字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.