這裏的問題是:MSSQL處理線返回而笨拙
,供大家參考:1,2和3使用Jython 2.2.1使用jdbc1.2取得
數據庫條目。 數據庫入口4是用vb做成的,用odbc替換程序。
我們發現,如果我直接從該SQL Server企業管理器軟件複製並粘貼jython和vb MailBody條目到wordpad,它將以完全正確的線返回格式輸出格式。如果我將每個文件的字節與十六進制編輯器或KDiff3進行比較,則它們的二進制完全相同。
有一個第三方程序使用這些數據。令人遺憾的是,第三方程序讀取數據,並且對於條目1至3,它顯示沒有線返回的數據。儘管對於條目4,它正確地格式化文本。作爲我們可以在圖片中看到的進一步證明,數據庫中的數據顯示方式不同。 不知怎的,行返回保存在數據庫中的vb條目,但它們被忽略的jython條目。如果我點擊條目4的'MailBody'字段,我可以按下我可以看到電子郵件的其餘部分。而jython的數據顯示在一行中。
什麼給,我錯過了什麼,以及如何處理? 這是我實際發送給數據庫的代碼片段。編輯:供參考:請忽略'已處理'欄中的差異,這是無關緊要的。 編輯:我想要做的就是讓jython程序以與vb程序相同的方式輸入數據。這樣第三方程序就會出現並正確顯示數據。 所以它看起來像是'MailBody'中的每個條目都會顯示「This is a testing only!」然後下一行「等等等等」,所以如果我是做一個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 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
請不要添加「編輯解決」。請將您的解決方案作爲答案發布或結束問題。編輯解決困惑。 – 2008-12-10 11:07:10