[已解决]python 修复文件名乱码问题
-
- 帖子: 19
- 注册时间: 2013-04-05 23:11
- 系统: ubuntu
[已解决]python 修复文件名乱码问题
我试图用python修复文件名乱码的问题,但decode("gbk").encode("utf-8")后还是乱码,不知道什么问题.ori:
ÈéÆ·1401.xls
ÂÃÓÎ1401.xls
ÂÃÓÎ1402.xls
ÂÃÓÎ1403.xls
Åëâ¿1401.xls
Åëâ¿1402.xls
Åëâ¿1403.xls
Åëâ¿1404.xls
Åëâ¿1405.xls
ÓªÑø1401.xls
ʳ°²1401.xls
ʳ°²1402.xls
ʳ¹¤1401.xls
ʳ¹¤1402.xls
decode:
脠茅脝路1401.xls
脗脙脫脦1401.xls
脗脙脫脦1402.xls
脗脙脫脦1403.xls
脜毛芒驴1401.xls
脜毛芒驴1402.xls
脜毛芒驴1403.xls
脜毛芒驴1404.xls
脜毛芒驴1405.xls
脫陋脩酶1401.xls
脢鲁掳虏1401.xls
脢鲁掳虏1402.xls
脢鲁鹿陇1401.xls
脢鲁鹿陇1402.xls
源码: 目标文件:
ÈéÆ·1401.xls
ÂÃÓÎ1401.xls
ÂÃÓÎ1402.xls
ÂÃÓÎ1403.xls
Åëâ¿1401.xls
Åëâ¿1402.xls
Åëâ¿1403.xls
Åëâ¿1404.xls
Åëâ¿1405.xls
ÓªÑø1401.xls
ʳ°²1401.xls
ʳ°²1402.xls
ʳ¹¤1401.xls
ʳ¹¤1402.xls
decode:
脠茅脝路1401.xls
脗脙脫脦1401.xls
脗脙脫脦1402.xls
脗脙脫脦1403.xls
脜毛芒驴1401.xls
脜毛芒驴1402.xls
脜毛芒驴1403.xls
脜毛芒驴1404.xls
脜毛芒驴1405.xls
脫陋脩酶1401.xls
脢鲁掳虏1401.xls
脢鲁掳虏1402.xls
脢鲁鹿陇1401.xls
脢鲁鹿陇1402.xls
源码: 目标文件:
上次由 x565178035 在 2014-10-21 12:43,总共编辑 2 次。
- lilydjwg
- 论坛版主
- 帖子: 4249
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: python 修复文件名乱码问题
弄明白你在干什么。你把什么东西当作 GBK 解码了?
[bash]xsel | iconv -t latin1 | iconv -f gbk[/bash]
你没有给出代码,所以我也不知道你在干什么。
[bash]xsel | iconv -t latin1 | iconv -f gbk[/bash]
你没有给出代码,所以我也不知道你在干什么。
-
- 帖子: 2148
- 注册时间: 2012-12-16 15:43
- 系统: debian
Re: python 修复文件名乱码问题
是2还是3版本 开头有加编码吗
-
- 帖子: 19
- 注册时间: 2013-04-05 23:11
- 系统: ubuntu
Re: python 修复文件名乱码问题
Source code:lilydjwg 写了:弄明白你在干什么。你把什么东西当作 GBK 解码了?
[bash]xsel | iconv -t latin1 | iconv -f gbk[/bash]
你没有给出代码,所以我也不知道你在干什么。
#!/usr/bin/env python
#coding= utf-8
#Edit by Anemone at :
#Sun Sep 28 14:48:12 CST 2014
#E-mail:x565178035@126.com
import os
import sys
def VisitDir(path):
li = os.listdir(path)
for p in li:
pathname = os.path.join(path,p)
if not os.path.isfile(pathname):
VisitDir(pathname)
else:
print p.decode("gbk").encode("utf-8")
print p
def main():
path = r"/root/tmp"
VisitDir(path)
if __name__ == '__main__':
main()
- astolia
- 论坛版主
- 帖子: 6436
- 注册时间: 2008-09-18 13:11
Re: python 修复文件名乱码问题
实际上关键在于你解压缩的时候就要设置好编码
LANG=C unzip zh.zip
或者用7zip
LANG=C 7z x zh.zip
LANG=C unzip zh.zip
或者用7zip
LANG=C 7z x zh.zip
-
- 帖子: 19
- 注册时间: 2013-04-05 23:11
- 系统: ubuntu
Re: python 修复文件名乱码问题
LANG=C是什么意思 我用了好像报错啊...can not open output fileastolia 写了:实际上关键在于你解压缩的时候就要设置好编码
LANG=C unzip zh.zip
或者用7zip
LANG=C 7z x zh.zip
- astolia
- 论坛版主
- 帖子: 6436
- 注册时间: 2008-09-18 13:11
Re: python 修复文件名乱码问题
不要解压到fat/ntfs文件系统上。
- lilydjwg
- 论坛版主
- 帖子: 4249
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: python 修复文件名乱码问题
代码请用代码标签,像这样最好了:x565178035 写了: Source code:
#!/usr/bin/env python
#coding= utf-8
#Edit by Anemone at :
#Sun Sep 28 14:48:12 CST 2014
#E-mail:x565178035@126.com
import os
import sys
def VisitDir(path):
li = os.listdir(path)
for p in li:
pathname = os.path.join(path,p)
if not os.path.isfile(pathname):
VisitDir(pathname)
else:
print p.decode("gbk").encode("utf-8")
print p
def main():
path = r"/root/tmp"
VisitDir(path)
if __name__ == '__main__':
main()
[python]
#!/usr/bin/env python
#coding= utf-8
#Edit by Anemone at :
#Sun Sep 28 14:48:12 CST 2014
#E-mail:x565178035@126.com
import os
import sys
def VisitDir(path):
li = os.listdir(path)
for p in li:
pathname = os.path.join(path,p)
if not os.path.isfile(pathname):
VisitDir(pathname)
else:
print p.decode("gbk").encode("utf-8")
print p
def main():
path = r"/root/tmp"
VisitDir(path)
if __name__ == '__main__':
main()[/python]
你使用 print 作为关键字,所以你在使用 Python 2。
你把文件名作为 GBK 编码的文本来解码,然后以 UTF-8 来编码。但问题是,你的文件名是 GBK 编码的吗?答案是:不是。你的文件名是乱码。
解压程序以为它是 UTF-8 编码的,于是以 UTF-8 编码存在文件系统里了。所以你要先解 UTF-8 编码,恢复原本的数据。但是解码之后的内容是 unicode。我们要让 Python 把它里边的每一个字符当成一个编码未知的字节,所以使用 latin1 再编码一次,然后再解 GBK 编码:
[python]
>>> print p.decode('utf-8').encode('latin1').decode('gbk')
乳品1401.xls
[/python]
后边 astolia 设置 LANG=C,告诉解压程序系统的编码是 C 规定的那个,相当于一字节一字符的 latin1 编码。(现代 Linux 默认的编码是 UTF-8;你如果使用 LANG=zh_CN.gbk 并且设置终端使用 GBK 编码来显示字符的话,也是可以看到正确显示的文件名的。)
解压来自 Windows 简体中文版的 zip 包,可以使用 gbkunzip 程序。
-
- 帖子: 19
- 注册时间: 2013-04-05 23:11
- 系统: ubuntu
Re: python 修复文件名乱码问题
但我更改后代码显示UnicodeDecodeError:'ascii' codec can't decode byte 0xd6 in position 0:oridinal not in range(128)lilydjwg 写了:代码请用代码标签,像这样最好了:x565178035 写了: Source code:
#!/usr/bin/env python
#coding= utf-8
#Edit by Anemone at :
#Sun Sep 28 14:48:12 CST 2014
#E-mail:x565178035@126.com
import os
import sys
def VisitDir(path):
li = os.listdir(path)
for p in li:
pathname = os.path.join(path,p)
if not os.path.isfile(pathname):
VisitDir(pathname)
else:
print p.decode("gbk").encode("utf-8")
print p
def main():
path = r"/root/tmp"
VisitDir(path)
if __name__ == '__main__':
main()
[python]
#!/usr/bin/env python
#coding= utf-8
#Edit by Anemone at :
#Sun Sep 28 14:48:12 CST 2014
#E-mail:x565178035@126.com
import os
import sys
def VisitDir(path):
li = os.listdir(path)
for p in li:
pathname = os.path.join(path,p)
if not os.path.isfile(pathname):
VisitDir(pathname)
else:
print p.decode("gbk").encode("utf-8")
print p
def main():
path = r"/root/tmp"
VisitDir(path)
if __name__ == '__main__':
main()[/python]
你使用 print 作为关键字,所以你在使用 Python 2。
你把文件名作为 GBK 编码的文本来解码,然后以 UTF-8 来编码。但问题是,你的文件名是 GBK 编码的吗?答案是:不是。你的文件名是乱码。
解压程序以为它是 UTF-8 编码的,于是以 UTF-8 编码存在文件系统里了。所以你要先解 UTF-8 编码,恢复原本的数据。但是解码之后的内容是 unicode。我们要让 Python 把它里边的每一个字符当成一个编码未知的字节,所以使用 latin1 再编码一次,然后再解 GBK 编码:
[python]
>>> print p.decode('utf-8').encode('latin1').decode('gbk')
乳品1401.xls
[/python]
后边 astolia 设置 LANG=C,告诉解压程序系统的编码是 C 规定的那个,相当于一字节一字符的 latin1 编码。(现代 Linux 默认的编码是 UTF-8;你如果使用 LANG=zh_CN.gbk 并且设置终端使用 GBK 编码来显示字符的话,也是可以看到正确显示的文件名的。)
解压来自 Windows 简体中文版的 zip 包,可以使用 gbkunzip 程序。
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 19
- 注册时间: 2013-04-05 23:11
- 系统: ubuntu
Re: python 修复文件名乱码问题
求linux下解压win的zip的正确方式。。。eexpress 写了:你这文件复制过程中,就已经乱码了。
- lilydjwg
- 论坛版主
- 帖子: 4249
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: python 修复文件名乱码问题
请贴 Traceback。x565178035 写了: 但我更改后代码显示UnicodeDecodeError:'ascii' codec can't decode byte 0xd6 in position 0:oridinal not in range(128)
- lilydjwg
- 论坛版主
- 帖子: 4249
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: python 修复文件名乱码问题
我不是说了 gbkunzip 吗?x565178035 写了:求linux下解压win的zip的正确方式。。。eexpress 写了:你这文件复制过程中,就已经乱码了。
- lilydjwg
- 论坛版主
- 帖子: 4249
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: python 修复文件名乱码问题
Cf. https://bbs.archlinuxcn.org/viewtopic.p ... 472#p20472 让我们来讨论一下「为什么很多人都不会寻找帮助」如何?
-
- 帖子: 19
- 注册时间: 2013-04-05 23:11
- 系统: ubuntu
Re: python 修复文件名乱码问题
谢谢 问题已解决!lilydjwg 写了:Cf. https://bbs.archlinuxcn.org/viewtopic.p ... 472#p20472 让我们来讨论一下「为什么很多人都不会寻找帮助」如何?