Форум сайта python.su
Всем привет. 2й день мучаюсь со следующей задачей:
Есть файл (предполагаю, что он в кодировке cp866) мне необходимо прекодировать его в cp1251.
Как мне это сделать? все перепробовал, ничего дельного не получается.
файл с названием 1.5-исходный файл.
Прикреплённый файлы:
1.5 (13,7 KБ)
Офлайн
del
Отредактировано vic57 (Июнь 17, 2017 19:44:53)
Офлайн
http://patttern.blogspot.ru/2012/07/php-python.html
определился как utf-8, но в нем какие-то служебные символы есть, при чтении ошибки выдает
Прикреплённый файлы:
text.png (204,5 KБ)
Офлайн
С чего ты взял что он текстовый? Это бинарный файл, ты его не перекодируешь.
Офлайн
Rodegast
с помощью NotePad++ все нормально перекодируется.
вот файл, который меня полностью устраивает.
Прикреплённый файлы:
n.txt (16,4 KБ)
Офлайн
vic57
Мне не главное, чтобы все эти кракозябры нормально отобразились, мне главное его нормально считать.
а в исходной кодировке с ним невозможно нормально работать.
Офлайн
когда-то делал конвертер
# -*- coding:utf-8 -*- import sys from PyQt4.QtGui import * from PyQt4.QtCore import * class TextConvert(QWidget): def __init__(self,parent=None): QWidget.__init__(self,parent) self.fname = '' self.plain = QPlainTextEdit() self.plain.setLineWrapMode(0) self.lbl = QLabel('<b>'+u'Кодировка:'+'</b>') self.box = QComboBox() self.btnLoad = QPushButton(u'Открыть') self.btnSave = QPushButton(u'Сохранить') grid = QGridLayout(self) grid.setMargin(1) grid.addWidget(self.plain,0,0,10,10) grid.addWidget(self.lbl,10,0,1,1) grid.addWidget(self.box,10,1,1,3) grid.addWidget(self.btnLoad,10,8,1,1) grid.addWidget(self.btnSave,10,9,1,1) self.load_codecs() self.box.currentIndexChanged.connect(self.on_index) self.btnLoad.clicked.connect(self.on_load) self.btnSave.clicked.connect(self.on_save) def load_codecs(self): lst =['System','UTF-8','cp1251','cp866','KOI8-R'] self.box.addItems(lst) def on_index(self): self.open_file() def on_load(self): tmp = QFileDialog.getOpenFileName(self,"Load", self.fname,"*.*") if not tmp: return self.fname = tmp self.open_file() def open_file(self): if not self.fname: return f = QFile(self.fname) if not f.open(QIODevice.ReadOnly): return s = QTextStream(f) s.setCodec(self.box.currentText().toLocal8Bit()) self.plain.setPlainText(s.readAll()) f.close() def on_save(self): tmp = QFileDialog.getSaveFileName(self,"Save", self.fname,"*.*") if not tmp: return self.fname = tmp f = QFile(self.fname) if not f.open(QIODevice.WriteOnly): return f.write(self.plain.toPlainText().toLocal8Bit()) f.close() if __name__=="__main__": app = QApplication([]) w = TextConvert() w.setFont(QFont('times',14)) w.move(0,0) w.resize(800,600) w.show() sys.exit(app.exec_())
Отредактировано vic57 (Июнь 18, 2017 02:39:35)
Офлайн
vic57
Спасибо, сейчас попробую.
Я уже замучался.
есть идеи как удалить из файла все нечитабельные символы?
Например все символы кроме руских, английских букв, пробелов и цифр?
что-то наподобие response, только наоборот. Чтобы удалял все, кроме определенных.
Регулярка тоже не пойдет, потому как какие именно символы встретиться могут, я точно не знаю.
Офлайн
Qt - crossplatform, так что все можно.
QString, QRegExp, QChar - смотри доки. я не помню точно - cp1251 если 1 байт, можно заменить все символы, не попадающие в диапазон пробелами например. надо в HEX-редакторе посмотреть
можно так
def open_file(self): if not self.fname: return f = QFile(self.fname) if not f.open(QIODevice.ReadOnly): return s = QTextStream(f) s.setCodec(self.box.currentText().toLocal8Bit()) txt = s.readAll() f.close() txt.replace(QRegExp("[^\w\r\n]")," ") self.plain.setPlainText(txt)
Отредактировано vic57 (Июнь 18, 2017 04:40:16)
Офлайн
nik.iwan2017
есть идеи как удалить из файла все нечитабельные символы?
Например все символы кроме руских, английских букв, пробелов и цифр?
li =re.findall("[A-Za-z0-9 А-Яа-я]+".data) " ".join(li)
Отредактировано doza_and (Июнь 18, 2017 08:52:13)
Офлайн