Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 17, 2017 12:56:55

nik.iwan2017
Зарегистрирован: 2017-06-17
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка файлов. Пожалуйста помогите!

Всем привет. 2й день мучаюсь со следующей задачей:
Есть файл (предполагаю, что он в кодировке cp866) мне необходимо прекодировать его в cp1251.
Как мне это сделать? все перепробовал, ничего дельного не получается.
файл с названием 1.5-исходный файл.

Прикреплённый файлы:
attachment 1.5 (13,7 KБ)

Офлайн

#2 Июнь 17, 2017 15:08:18

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Кодировка файлов. Пожалуйста помогите!

del

Отредактировано vic57 (Июнь 17, 2017 19:44:53)

Офлайн

#3 Июнь 17, 2017 19:44:33

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Кодировка файлов. Пожалуйста помогите!

http://patttern.blogspot.ru/2012/07/php-python.html
определился как utf-8, но в нем какие-то служебные символы есть, при чтении ошибки выдает

Прикреплённый файлы:
attachment text.png (204,5 KБ)

Офлайн

#4 Июнь 17, 2017 23:14:40

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2682
Репутация: +  182  -
Профиль   Отправить e-mail  

Кодировка файлов. Пожалуйста помогите!

С чего ты взял что он текстовый? Это бинарный файл, ты его не перекодируешь.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Июнь 18, 2017 02:16:28

nik.iwan2017
Зарегистрирован: 2017-06-17
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка файлов. Пожалуйста помогите!

Rodegast
с помощью NotePad++ все нормально перекодируется.
вот файл, который меня полностью устраивает.

Прикреплённый файлы:
attachment n.txt (16,4 KБ)

Офлайн

#6 Июнь 18, 2017 02:19:05

nik.iwan2017
Зарегистрирован: 2017-06-17
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка файлов. Пожалуйста помогите!

vic57
Мне не главное, чтобы все эти кракозябры нормально отобразились, мне главное его нормально считать.
а в исходной кодировке с ним невозможно нормально работать.

Офлайн

#7 Июнь 18, 2017 02:39:19

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Кодировка файлов. Пожалуйста помогите!

когда-то делал конвертер

 # -*- 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)

Офлайн

#8 Июнь 18, 2017 03:02:00

nik.iwan2017
Зарегистрирован: 2017-06-17
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка файлов. Пожалуйста помогите!

vic57
Спасибо, сейчас попробую.
Я уже замучался.
есть идеи как удалить из файла все нечитабельные символы?
Например все символы кроме руских, английских букв, пробелов и цифр?
что-то наподобие response, только наоборот. Чтобы удалял все, кроме определенных.
Регулярка тоже не пойдет, потому как какие именно символы встретиться могут, я точно не знаю.

Офлайн

#9 Июнь 18, 2017 03:46:14

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Кодировка файлов. Пожалуйста помогите!

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)

Офлайн

#10 Июнь 18, 2017 08:46:03

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Кодировка файлов. Пожалуйста помогите!

nik.iwan2017
есть идеи как удалить из файла все нечитабельные символы?
Например все символы кроме руских, английских букв, пробелов и цифр?

Так в чем сложность? если 866 в 1251 то просто конвертируете а на выход отдаете только нужные вам буквы
например
 li =re.findall("[A-Za-z0-9 А-Яа-я]+".data)
" ".join(li)
Поправьте выражение может еще какие буквы потребуются типа е с точками.

Использовать для этого Qt? Отфильтровать буквы и без него можно.

Для такой операции вообщето translate предназначен
https://docs.python.org/2/library/string.html#string.translate



Отредактировано doza_and (Июнь 18, 2017 08:52:13)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version