Python2.7中UTF-8转中文及打印含中文文件名路径的问题
在Python 2.7中处理UTF-8转中文及打印中文文件名的解决方案
嘿,我来帮你搞定Python2.7里这两个中文编码相关的问题~
1. UTF-8编码转中文字符
Python2.7里字符串分两种:str是字节串,unicode才是真正的字符对象。UTF-8编码的内容本质是字节序列,要显示成中文字符,得先把它解码成unicode对象。
举个简单例子:
# 因为文件头声明了# -*- coding: utf-8 -*-,所以这里的字符串是UTF-8编码的str utf8_byte_str = "大禹治水" # 解码为unicode,才能正确显示中文 chinese_unicode = utf8_byte_str.decode('utf-8') print(chinese_unicode)
如果是从文件读取UTF-8内容,也要记得解码:
with open('005大禹治水.lrc', 'r') as lrc_file: # 读取到的是UTF-8字节串 utf8_content = lrc_file.read() # 转成unicode处理中文 unicode_content = utf8_content.decode('utf-8') # 后续操作比如提取歌词、打印都用unicode就不会乱码
2. 打印包含目录的中文文件名
针对你给出的示例路径/home/user/lrc/005大禹治水.lrc,在Python2.7里打印这类带中文的路径,关键是处理好路径字符串的编码:
推荐方案:解码为unicode后打印
Linux/macOS下,os模块返回的路径默认是UTF-8编码的str,把它转成unicode再打印,就能稳定显示中文。结合你的代码修改如下:
# -*- coding: utf-8 -*- from __future__ import print_function import argparse import os from pydub import AudioSegment def main(): wd= os.path.split(os.path.realpath(__file__))[0] parser = argparse.ArgumentParser() parser.add_argument('--lrc', default=os.path.expanduser(wd + '/lrc')) args = parser.parse_args() # 遍历指定目录下的所有文件 for filename in os.listdir(args.lrc): # 拼接完整文件路径 full_file_path = os.path.join(args.lrc, filename) # 将UTF-8编码的路径解码为unicode unicode_path = full_file_path.decode('utf-8') # 打印中文路径 print(unicode_path) if __name__ == "__main__": main()
备选方案:直接编码适配终端
如果你的终端默认用UTF-8编码,也可以直接把路径字节串编码后打印(不过还是推荐unicode方案,兼容性更强):
print(full_file_path.encode('utf-8'))
另外提一句:如果是在Windows系统下,文件名编码是GBK/GB2312,这时候要把解码换成decode('gbk'),不过你的示例是Linux风格路径,应该用不到这个~
内容的提问来源于stack exchange,提问作者David Aksnes
相关产品推荐
相关产品推荐

