https://bugs.kde.org/show_bug.cgi?id=524590
--- Comment #11 from [email protected] <[email protected]> --- (In reply to [email protected] from comment #7) > Titre : Échappement CSV incorrect dans SKGServices::stringToCsv (doublement > erroné des guillemets) > > Description : > Dans la méthode SKGServices::stringToCsv (skgbasemodeler/skgservices.cpp), > les guillemets doubles étaient remplacés deux fois en raison de > l'utilisation d'une chaîne temporaire. Cela provoquait un doublement > indésirable des guillemets lors des exports CSV. > > Code d'origine : > > C++ > QString SKGServices::stringToCsv(const QString& iNumber) > { > QString output = iNumber; > output.replace('"', QStringLiteral("#SKGDOUBLECOTE#")); > output.replace(QStringLiteral("#SKGDOUBLECOTE#"), > QStringLiteral("\"\"")); > output = '"' % output % '"'; > return output; > } > Correction proposée : > Supprimer l'étape intermédiaire #SKGDOUBLECOTE# et effectuer le remplacement > direct des guillemets doubles, conformément à la norme CSV : > > C++ > QString SKGServices::stringToCsv(const QString& iNumber) > { > QString output = iNumber; > output.replace('"', QStringLiteral("\"\"")); > output = '"' % output % '"'; > return output; > } > Statut : > Testé localement sur la version 2.31.0. La modification corrige le problème > d'échappement des guillemets et l'export CSV fonctionne désormais > correctement. EXPLICATION FINALE QUI SEMBLE AVOIR DU SENS 1. La vraie chaîne d'appels dans Skrooge Dans le code de Skrooge, l'affichage des montants dans l'interface (les tableaux de comptes, les listes d'opérations, etc.) ne passe pas par stringToCsv, mais par la méthode SKGServices::toCurrencyString. Or, si on regarde comment toCurrencyString fonctionnait dans la base de code d'origine de Skrooge, elle faisait elle-même appel à... stringToCsv pour formater et nettoyer la chaîne finale avant de l'afficher dans les éléments graphiques (les QTableWidgetItem ou les vues Qt) ! 2. Le mécanisme de l'erreur d'affichage Voici la séquence qui provoquait l'apparition des parenthèses : La valeur brute : Vous avez une valeur négative dans SQLite, par exemple -150.00. Le passage par la locale/Qt : Quand Skrooge formate ce nombre en chaîne de caractères, Qt applique les règles de formatage selon la configuration système ou le paramétrage interne. Dans certaines locales ou configurations de formatage monétaire, un nombre négatif est représenté avec des guillemets ou des caractères de cadrage temporaires. Le piège de stringToCsv : toCurrencyString envoyait le résultat à stringToCsv. À cause du bogue de la double substitution (#SKGDOUBLECOTE#), la chaîne de texte affichant le montant négatif se retrouvait corrompue avec des paires de guillemets superflues. Le rendu graphique (Qt) : Lorsque le composant d'affichage graphique de KDE/Qt recevait une chaîne monétaire corrompue par ces guillemets parasites, il n'arrivait plus à parser le signe moins -. Pour éviter de crasher ou d'afficher un symbole inconnu, le moteur de rendu de texte fallbackait sur la convention d'affichage comptable standard de remplacement : entourer le nombre de parenthèses (150.00). En résumé Le bogue dans stringToCsv altérait la chaîne textuelle générée par toCurrencyString. L'interface graphique de Skrooge recevait un texte corrompu et transformait le signe - mal interprété en parenthèses (...). En corrigeant stringToCsv, le texte envoyé aux composants graphiques de Skrooge est redescendu propre, et Qt a pu réafficher normalement le signe moins - ! -- You are receiving this mail because: You are watching all bug changes.
