Python - 希伯来语编码问题

1 投票
1 回答
2108 浏览
提问于 2025-04-18 03:46

我正在尝试把一个文件夹里的多个希伯来语的.txt文件合并成一个文件。希伯来语的编码是cp1255。我已经指定了编码,所以打开文件是成功的,但在尝试把字符串写入文件时,编码就出问题了。

如果我在打开文件时不指定编码,打开操作就会失败(在第7行)。

dirLoc="source/folder"
import os
files=os.listdir(dirLoc)
for f in files:
if f.endswith('.txt'):
    print(f)
    data=open(dirLoc+'/'+f, 'r', encoding="cp1255")
    out=open("outPut.txt", 'a')
    for line in data:
        out.write(line)
    data.close()
    out.close()

我遇到的错误是常见的错误信息: UnicodeDecodeError: 'charmap' 编解码器无法解码位置Y的字节X:字符映射到未定义的内容。

补充:经过进一步尝试,问题似乎确实出在把希伯来语字符串写入.txt文件上。即使我把文件另存为其他格式(比如ANSI或utf-8),并相应地更改编码,问题依然存在。而用英文的.txt文件则没有问题。

1 个回答

1

好的,经过一天的尝试,我找到了一个解决办法,如下所示:

dirLoc='source/folder'
import os
import codecs
files=os.listdir(dirLoc)
for f in files:
    if f.endswith('.txt'):
        data=codecs.open(dirLoc+'/'+f, 'r+', encoding='utf8')
    try:
        data1=data.read()
        out=codecs.open(dirLoc+'/outPut.txt', 'a+', encoding='utf8')
        try:
            out.write(data1)
        except:
            print('file ' +f+ ' failed to write')
    except:
        print('file '+f+' failed to read')
    out.close()       
    data.close()

codecs.open 这个函数让我可以在写入和读取文件时指定编码方式。注意,你需要先导入 codecs 才能使用它。出现异常的原因是编码仍然可能出问题,有时会有文件导致异常。使用 try 语句可以让我跳过那些无法读取或写入的文件,而不会导致整个程序崩溃。

撰写回答