Voici le problème:MSSQL gère la ligne retourne plutôt gauchement
pour votre référence:
base de données entrées1,2 et 3 sont à l'aide Jython 2.2.1 en utilisant jdbc1.2. L'entrée de la base de données 4 est faite en utilisant vb l'ancien programme à remplacer en utilisant odbc.
Nous avons trouvé que si je copier et coller les deux entrées de Jython et vb mailBody à WordPad directement à partir de ce logiciel Enterprise Manager SQL Server, il transmet le format parfaitement avec retours à la ligne correcte. si je compare les octets de chaque fichier avec un éditeur hexadécimal ou KDiff3, ils sont identiquement identiques.
Il existe un programme tiers qui consomme ces données. Malheureusement, ce programme tiers lit les données et pour les entrées 1 à 3 il affiche les données sans retour de ligne. Cependant, pour l'entrée 4, il formate correctement le texte. Comme preuve supplémentaire que nous pouvons voir sur l'image, les données dans la base de données sont affichées différemment. D'une certaine façon, les retours de ligne sont conservés dans la base de données pour les entrées vb, mais les entrées jython sont ignorées. si je clique sur le champ d'entrée 'MailBody' 4 je peux appuyer vers le bas je peux voir le reste de l'email. Alors que les données pour Jython sont affichées dans une ligne.
Qu'est-ce qui donne, qu'est-ce qui me manque, et comment puis-je gérer cela? Voici un extrait du code où je l'envoie réellement à la base de données.
EDIT: FYI: s'il vous plaît ne tenez pas compte des différences dans la colonne 'Processed', ce n'est pas pertinent. EDIT: ce que je veux faire, c'est que le programme jython entre les données de la même manière que le programme vb. Alors que le programme 3ème partie viendra et affichera correctement les données. alors à quoi ressemblera chaque entrée dans 'MailBody' affichera "Ceci est un test seulement!" puis la ligne suivante « etc etc » donc si je devais faire une copie d'écran toutes les entrées ressembleraient entrée de la base de données 4.
SOLVED
ajouter _force_CRLF au mélange:
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
S'il vous plaît ne pas ajouter « Modifier Résolu ». Publiez votre solution en tant que réponse ou fermez la question. Edit Solved est déroutant. –