MSSQL ручки возвращается линии довольно неуклюже

голоса
0

Вот проблема:

для справки:

http://i.stack.imgur.com/mmrNH.jpg

записей базы данных 1,2 и 3 выполнены с использованием Jython 2.2.1 с помощью jdbc1.2. запись базы данных 4 производится с использованием VB стар, чтобы быть заменить программу с помощью ODBC.

Мы обнаружили, что если я скопировать и вставить оба Jython и VB MailBody записи в программу WordPad непосредственно из этого программного обеспечения диспетчера SQL Server Enterprise он выводит формат отлично с правильными возвратами линии. если сравнить байты каждого файла с шестнадцатеричным редактором или KDiff3 они являются бинарными идентично.

Существует 3-я программа партии, которая потребляет эти данные. К сожалению, что третья сторона программа считывает данные и запись 1 до 3 отображает данные без возвращения строки. хотя для записи 4 это правильно форматирует текст. Как futher доказательства мы можем увидеть на картинке, данные в базе данных отображаются по-разному. Так или иначе возвращается строка сохраняется в базе данных для записей Vb, но записи Jython они забывают. если я нажимаю на поле «MailBody» входа 4 я могу придавить я могу видеть остальную часть электронной почты. В то время как данные для Jython отображается в одной строке.

Что дает то, что мне не хватает, и как я могу справиться с этим? Вот фрагмент кода, где я на самом деле отправить его в базу данных.

EDIT: FYI: не обращайте внимания на расхождения в столбце «Обработано», это не имеет никакого значения. EDIT: что я хочу сделать, это на вход Jython программы данные таким же образом, как и программа VB. Так что программа третьей стороны придет и правильно отображать данные. так что это будет выглядеть как есть каждая запись в «MailBody» покажет «Это только тестирование!» то следующая строка «и т.д. и т.п.», так что если я должен был сделать screendump все записи будет напоминать запись базы данных 4.

РЕШИТЬ

добавить _force_CRLF в смесь:

def _force_CRLF(self, data):
    '''Make sure data uses CRLF for line termination.
    Nicked the regex from smtplib.quotedata. '''
    print data
    newdata = re.sub(r'(?:\r\n|\n|\r(?!\n))', \r\n, data)
    print newdata
    return newdata

def _execute_insert(self):
    try:
        self._stmt=self._con.prepareStatement(\
            INSERT IGNORE  INTO EmailHdr (EntryID, MailSubject, MailFrom, MailTo, MailReceive, MailSent, AttachNo, MailBody)\
             VALUES (?, ?, ?, ?, ?, ?, ?, cast(? as varchar ( + str(BODY_FIELD_DATABASE) + ))))
        self._stmt.setString(1,self._emailEntryId)
        self._stmt.setString(2,self._subject)
        self._stmt.setString(3,self._fromWho)
        self._stmt.setString(4,self._toWho)
        self._stmt.setString(5,self._format_date(self._emailRecv))
        self._stmt.setString(6,self._format_date(self._emailSent))
        self._stmt.setString(7,str(self._attachmentCount))
        self._stmt.setString(8,self._force_CRLF(self._format_email_body()))
        self._stmt.execute()
        self._prepare_inserting_attachment_data()
        self._insert_attachment_data()
    except:
        raise

def _format_email_body(self):
    if not self._emailBody:
        return could not extract email body
    if len(self._emailBody) > BODY_TRUNCATE_LENGTH:
        return self._clean_body(self._emailBody[:BODY_TRUNCATE_LENGTH])
    else:
        return self._clean_body(self._emailBody)

def _clean_body(self,dirty):
    '''this method simply deletes any occurrence of an '=20' that plagues my output after much testing this is not related to the line return issue, even if i comment it out I still have the problem.''' 
    dirty=str(dirty)
    dirty=dirty.replace(r=20,)
    return r%s%dirty
Задан 10/12/2008 в 06:10
источник пользователем
На других языках...                            


2 ответов

голоса
1

Вы должны смотреть на quopri модуль (и другие, касающиеся электронной почты), так что вы не должны использовать грязные приемы, как _clean_body

Ответил 12/12/2008 в 15:06
источник пользователем

голоса
1

Я предлагаю, чтобы добавить вывод отладки вашей программы, сброс кодов символов перед вставкой в ​​БД. Есть вероятность того, что Jython заменить CRLF пару с одного символа и не восстанавливает его при записи в БД.

Ответил 10/12/2008 в 06:36
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more