Python-python3.1can';似乎无法处理UTF-16编码的文件?

Python-python3.1can';似乎无法处理UTF-16编码的文件?,python,utf-8,character-encoding,utf-16,Python,Utf 8,Character Encoding,Utf 16,我试图运行一些代码,简单地遍历一堆文件,并将那些碰巧是.txt文件的文件写入同一个文件,删除所有空格。下面是一些简单的代码,可以实现这一点: for subdir, dirs, files in os.walk(rootdir): for file in files: if '.txt' in file: f = open(subdir+'/'+file, 'r') line = f.readline() while line:

我试图运行一些代码,简单地遍历一堆文件,并将那些碰巧是.txt文件的文件写入同一个文件,删除所有空格。下面是一些简单的代码,可以实现这一点:

for subdir, dirs, files in os.walk(rootdir):
for file in files:
    if '.txt' in file:
        f = open(subdir+'/'+file, 'r')
        line = f.readline()
        while line:
            line2 = line.split()
            if line2:
                output_file.write(" ".join(line2)+'\n')
            line = f.readline()
        f.close()
但是,我得到了以下错误:

文件“/usr/lib/python3.1/codecs.py”,第300行,解码中 (结果,消耗)=自身缓冲区解码(数据,自身错误,最终) UnicodeDecodeError:“utf8”编解码器无法解码位置0中的字节0xfe:意外的代码字节

事实证明,这些.txt文件都是UTF-16格式的(根据FireFox,无论如何)。我认为Python3.x应该能够处理任何类型的字符编码

最好的,
乔治娜

使用
open(bla,'r',encoding=“utf-16”)
使用
open(bla,'r',encoding=“utf-16”)
有各种utf-16编码

  • utf-16-be大端号无BOM

  • utf-16-lelittle endian无物料清单

  • utf-16little-endian+BOM

示例:

Python 3.2 (r32:88452, Feb 20 2011, 11:12:31) 
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 'a'.encode('utf-16')
>>> a
b'\xff\xfea\x00'
>>> a.decode('utf-16')
'a'
>>> a = 'a'.encode('utf-16-le')
>>> a
b'a\x00'
>>> a.decode('utf-16-le')
'a'
>>> a = 'a'.encode('utf-16-be')
>>> a
b'\x00a'
>>> a.decode('utf-16-be')
'a'

您可以按照

的建议使用这些编码。有各种utf-16编码

  • utf-16-be大端号无BOM

  • utf-16-lelittle endian无物料清单

  • utf-16little-endian+BOM

示例:

Python 3.2 (r32:88452, Feb 20 2011, 11:12:31) 
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 'a'.encode('utf-16')
>>> a
b'\xff\xfea\x00'
>>> a.decode('utf-16')
'a'
>>> a = 'a'.encode('utf-16-le')
>>> a
b'a\x00'
>>> a.decode('utf-16-le')
'a'
>>> a = 'a'.encode('utf-16-be')
>>> a
b'\x00a'
>>> a.decode('utf-16-be')
'a'

你可以按照

的建议使用这些编码,你能告诉Python文件是UTF-16吗?好的,一行:
output\u file.write(input\u file.read().decode('UTF-16')。替换(u“”,u“”).encode('desired encoding'))
你能告诉Python文件是UTF-16吗?好的,一行:
output\u file.write(input\u file.read().decode)('utf-16')。替换(u“”,u“”)。编码('desired encoding'))
Woops--谢谢!就在你发布这篇文章的时候,我发现了这篇伟大的文章:Woops--谢谢!就在你发布这篇文章的时候,我发现了这篇伟大的文章: