马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
要求:
中文不能为乱码
编码全部为改为utf-8
文件全部改为unix
如下我写了后有的文件的中文是乱码了,应该原来是Ascall码改为utf-8成了乱码 encoding = 'utf-8'
for root, dirs, files in os.walk(self.factoryroot_path):
for file in files:
if file.endswith('.ini'):
file_path = os.path.join(root, file)
os.system('dos2unix ' + file_path)
# 以读取二进制文件的方式打开 ini 文件
with codecs.open(file_path, 'rb') as f:
content = f.read().decode(encoding, 'ignore')
# 以写入二进制文件的方式重新保存 ini 文件
with codecs.open(file_path, 'wb') as f:
f.write(content.encode(encoding))
本帖最后由 isdkz 于 2023-6-26 10:19 编辑
在你的代码中,你已经将所有的ini文件都预设为了utf-8编码来读取,这在处理那些不是utf-8编码的文件时会造成问题,如你提到的中文乱码问题。解决这个问题的一种方法是在读取文件前先判断文件的编码类型,然后使用相应的编码来读取文件。
Python标准库中没有提供检测文件编码的函数,但是我们可以使用第三方库 chardet 来判断文件的编码。下面是一个改进的代码示例:
import os
import codecs
import chardet
for root, dirs, files in os.walk(self.factoryroot_path):
for file in files:
if file.endswith('.ini'):
file_path = os.path.join(root, file)
os.system('dos2unix ' + file_path)
# 使用chardet库来判断文件的编码
rawdata = open(file_path, "rb").read()
result = chardet.detect(rawdata)
encoding = result['encoding']
# 根据检测到的编码来读取文件
with codecs.open(file_path, 'r', encoding=encoding) as f:
content = f.read()
# 以utf-8编码重新保存 ini 文件
with codecs.open(file_path, 'w', encoding='utf-8') as f:
f.write(content)
注意,在写文件时我们改为了'w'模式,因为我们要以文本模式写入文件,不再需要用到'wb'模式。使用chardet库后,我们就能正确识别并处理各种编码的文件了,但是注意chardet库可能无法识别出所有类型的编码,尤其是一些非常罕见的编码。
|