https://bugs.kde.org/show_bug.cgi?id=524590
Stephane MANKOWSKI <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |FIXED Status|REPORTED |RESOLVED --- Comment #12 from Stephane MANKOWSKI <[email protected]> --- (In reply to [email protected] from comment #11) > (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) ! > Absolument pas, toCurrencyString fait appel à stringToCsv pour interpréter correctement LC_MONETARY. > 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. C'est pas vraiment cela. > > 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 - ! Non, c'est vraiment pas comme cela que ça fonctionne. Je pense que vous avez fait cette analyse avec une IA qui s'est un peu perdu. Dans tous les cas, il y a maintenant une option pour choisir comment afficher les montants (numérique ou monétaire) et cette option résout le problème. -- You are receiving this mail because: You are watching all bug changes.
