python3程序中的UnicodeEncodeError

时间:2016-03-04 20:34:59

标签: python unicode

该程序假设将硬盘驱动器上的所有文件写入文件。当我在空闲状态下运行它运行直到它遇到一个特定的文件,然后给我一个错误:UnicodeEncodeError:'charmap'编解码器不能编码位置143的字符'\ u2122':字符映射到< undefined>

#! python3

import os

nfile=open('c:\\users\\computer 6\\desktop\\HardDrive.txt','w')

for folder,subfolder,files in os.walk('c:\\'):
 if len(files) != 0:
  for i in range(len(files)):
   nfile.write(os.path.join(folder,files[i])+'\n')
 else:
  continue

nfile.close()

print('Log complete.')

我猜这是因为该文件包含西班牙语字母?

2 个答案:

答案 0 :(得分:1)

指定支持所有Unicode字符的编码。 open默认为locale.getpreferredencoding()\u2122是商标符号,默认编码不支持:

#! python3
import os

with open('c:\\users\\computer 6\\desktop\\HardDrive.txt','w',encoding='utf8') as nfile:
    for folder,subfolders,files in os.walk('c:\\'):
        for file in files:
            nfile.write(os.path.join(folder,file) + '\n')

print('Log complete.')

答案 1 :(得分:-2)

  编辑:我看到我在问题和答案中错过了一些观点   确实不对。所以请忘记以下内容(我不会删除它   只有在"历史"目的)。

你最可能是对的。与法语字符有同样的问题,这样解决了:

    for f in next(os.walk(full_path))[2]:
        ##
        #   @todo The following line is a hack to avoid encoding errors,
        #         it would be better to find a way to avoid doing this
        #         encoding/decoding on each file.

        f = f.encode('utf-8', 'replace').decode()

        file_name, extension = os.path.splitext(f)

        etc.