Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: tito_livio - Novembre 12, 2024, 12:57:16 am

Titolo: [Risolto] Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: tito_livio - Novembre 12, 2024, 12:57:16 am
Ciao a tutti,
ho un progetto in Lazarus 2.0.6 per Windows a 32 bit che lavora con dati in un DB MySql 5.0, che vorrei convertire in Lazarus con una versione attuale a 64 bit.
Quindi ho compilato con la nuova versione di lazarus (3.6) ma c'è un problema.
I caratteri con lettere accentate, e anche altri, non sono più leggibili. Per esempio per un certo campo, di una tabella del db, prima leggevo àèìòù @€# adesso con il nuovo programma leggo à èìòù @€#.
Nel programmi, sia quello vecchio che quello nuovo, non definisco il charset, mentre quello del db Mysql è latin1.
Come si potrebbe risolvere, secondo voi, questo problema?
Grazie
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: bonmario - Novembre 12, 2024, 07:27:34 am
Ciao,
scusami se sarò impreciso, ma sono anni che non mi capita questa cosa !!!
Per prima cosa, fai un backup del tuo progetto.

Fatto il backup, apri il progetto e poi vai su Strumenti ==> Converti codifica dei progetti/pacchetti (da me è il quintultimo).
nella prima combobox, scegli "Progetto corrente", e compili tu quello che ti interessa dei campi successivi. In fondo al dialogo, c'è una tabellina che ti riassume sorgente per sorgente qual è la codifica che ha rilevato prima di fare il lavoro.

Fammi sapere se risolvi o meno così, perché se non risolvi, oltre a questo, bisogna fare un altro lavoro, che però non ricordo a memoria, ma dovrei andare a cercare nei miei appunti

Ciao, Mario
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: DragoRosso - Novembre 12, 2024, 09:16:54 am
@tito_livio

Ti rimando a questa discussione sui caratteri: https://www.lazaruspascal.it/index.php?topic=2848.msg19416#msg19416 (https://www.lazaruspascal.it/index.php?topic=2848.msg19416#msg19416)

Per quello che riguarda il set caratteri, il tuo DB usa il set standard che comprende anche caratteri accentati, è necessario che il tuo programma si allinei a queste set.

Normalmente "Latin 1" comprende i caratteri ASCII (i primi 128) più altri 128 "Latin-1 Supplemental".

Quelli che vedi ora sono i caratteri del "Latin-1 supplemental" come definiti dallo standard.

Il tuo vecchio programma ha inserito i caratteri nel database secondo la vecchia notazione a "CodePage", mentre il nuovo lavora in modalità diversa.

Questa è la pagina github che ti fà vedere una utility (dovrebbe essere compresa in Lazarus già) che converte stringhe da un set all'altro. Devi trovare il set usato dal tuo programma vecchio (probabilmente "CP1250").

https://github.com/alrieckert/lazarus/blob/master/components/lazutils/lconvencoding.pas (https://github.com/alrieckert/lazarus/blob/master/components/lazutils/lconvencoding.pas)

O in alternativa settare il set di caratteri di default x Lazarus, ma non saprei come fare.
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: DragoRosso - Novembre 12, 2024, 09:35:29 am
Ahh, nota aggiuntiva.

Consiglio spassionato, se ti è possibile ovviamente, è quello di lavorare in Utf-8.

Quindi una volta aggiornato il programma, convertire tutto il database in UTF-8. Da quel momento li non avrai più problemi di codifica e potrai lavorare con tutte le lingue del mondo (o quasi tutte) senza pensieri.

Ricodificare i testi in utf-8 nel database non rappresenta un problema, sempre che non usi ovviamente chiavi o indici o "campi collegati" di tipo stringa. Se è così allora meglio che dimentichi questa ultima parte.

C'è anche da dire rispetto a questo punto (utf-8), che occorre fare attenzione al fatto che Lazarus e FPC non sono ancora totalmente compatibili con Unicode (Utf-8 è una delle codifiche comprese nell'universo unicode).

Per esempio se cerchi di trovare un carattere tramite la funzione POS in una stringa unicode il risultato potrebbe essere errato. Per farlo devi usare le funzioni specifiche e abilitare UNICODE in Lazarus.

Più volte ho riportato ciò, ma ho avuto solo smentite parziali.

Se qualcuno che lavora con Lazarus a livello professionale potesse chiarire in modo definitivo questo  punto sarebbe utile (anche a me, ringrazio anticipatamente).

Ciao
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: nomorelogic - Novembre 12, 2024, 10:03:51 am
ciao tito_livio

potresti vedere con quale charset è stato creato il DB in MySql?

Se ad esempio trovi qualcosa tipo:
Codice: [Seleziona]
CREATE DATABASE `database_di_prova` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */;

già sappiamo che i dati sono memorizzati nel DB in uft8.

Poi dovresti vedere anche la tabella che ti interessa, vedere se nel DDL c'è qualcosa tipo:
Codice: [Seleziona]
CREATE TABLE `tabella_001` (
   ...
   ...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


Secondo me potrebbe chiarirci meglio il problema.

Ciao



Edit:
se ad esempio fai un backup - che in fondo è uno script SQL - al suo interno puoi trovare sia le varie "CREATE" che le "INSERT"...
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: tito_livio - Novembre 12, 2024, 11:57:52 am
Comincio a rispondere:

Fatto il backup, apri il progetto e poi vai su Strumenti ==> Converti codifica dei progetti/pacchetti (da me è il quintultimo).
nella prima combobox, scegli "Progetto corrente", e compili tu quello che ti interessa dei campi successivi. In fondo al dialogo, c'è una tabellina che ti riassume sorgente per sorgente qual è la codifica che ha rilevato prima di fare il lavoro.

Ho eseguito i passi che tu mi consigli ma come ti posso fare vedere nell'immagine allegata, lo strumento mi dice che è già tutto con la codifica corretta.
Vorrei aggiungere che:
-Questi problemi di codifica accadono solo nella memorizzazione su db, se, per esempio, la vecchia versione salva un file di testo con i caratteri accentati, la nuova li legge correttamente.
-Ho provato a compilare con una versione intermedia, la 2.2.4 a sia a 64 che a 32 bit, e il problema rimane. Quindi è qualcosa che è cambiato in Lazarus fra queste due versioni, la 2.0.6 e la 2.2.4

Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: bonmario - Novembre 12, 2024, 12:16:43 pm
Comincio a rispondere:
Ho eseguito i passi che tu mi consigli ma come ti posso fare vedere nell'immagine allegata, lo strumento mi dice che è già tutto con la codifica corretta.

Ok, allora non sei nella situazione a cui pensavo io.
Ti conviene rispondere alle domande fatte dagli altri, e poi si vedrà come proseguire
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: DragoRosso - Novembre 12, 2024, 02:51:43 pm
-Questi problemi di codifica accadono solo nella memorizzazione su db, se, per esempio, la vecchia versione salva un file di testo con i caratteri accentati, la nuova li legge correttamente.

File di testo e DB sono cosa assolutamente diverse e non comparabili. Ciò che viene scritto e letto in un file di testo ha nei due "sensi" read/write un processamento ben diverso da quella che ha un DB (sempre read/write). Non parliamo poi della visualizzazione dei caratteri, anche questa ci mette del suo.

Giusto per capirsi: se io scrivo il carattere $D2 ovunque, questa viene interpretata in mille modi a seconda di chi lo legge (non di chi lo scrive).... $D2 in codepage 1250 è il carattere "Ń", ma se lo faccio leggere ad un giapponese (codepage 932) è il carattere "メ ".
(a titolo di curiosità, il carattere $D2 in UTF-8 è "Ò", giusto per agitare ancora più le acque).

Questo è più o meno accaduto a te. Hai scritto in un modo e il software odierno lo legge in un altro. Prima si usava il codepage 1250 ora si usa altro. Nel DB il dato è grezzo (dovrebbe essere ...) in binario.

Il DB non ha la capacità di convertire i dati, presuppone che entrino in un formato e escano in quel formato. Ma se hai scritto ciò mille anni fà, magari il formato non è più compatibile con quello attuale, o meglio non è più lo standard.
La compatibilità la si ottiene con le conversioni.

E' per questo che si sono inventati l'UNICODE, altrimenti sarebbe un disastro con l'interconnessione che c'è oggi tra i popoli.
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: DragoRosso - Novembre 12, 2024, 02:56:32 pm
Giusto per darti una soluzione alla mano, i dati nel DB vengono trattai come Unicode (utf-8), ma è probabile che il software avesse scritto i dati in CP 1250.

Prova semplicemente a leggere una stringa e convertirla in CP1250 ... guarda il risultato e sono convinto che potrebbe funzionare.

La conversione è solo in fase di visualizzazione .... spero che sia chiaro ... Però in questo momento mi sfugge come visualizzare i caratteri di una stringa in un CPxxx o in un CPyyy ...

... bhè certo con le funzioni che ti ho indicato nel mio primo post ...
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: tito_livio - Novembre 12, 2024, 03:46:17 pm
Giusto per darti una soluzione alla mano, i dati nel DB vengono trattai come Unicode (utf-8), ma è probabile che il software avesse scritto i dati in CP 1250.

Al momento sto "elaborando" tutto il materiale che mi hai fornito con i tuoi post, però ti posso dire che ho letto i dati scritti (col prog nuovo) come se fossero stati scritti in CP1250 (col prog vecchio).
In effetti quello che leggo cambia ma sono sempre caratteri indefiniti: ??é??? @#°€.
Mi spiego come ho fatto a leggerli in CP1250:
Premetto che uso i componenti "di serie" per accedere al db, quindi uso questa istruzione:
Codice: [Seleziona]
MySQL50Connection1.CharSet := 'CP1250';
Il problema è capire quale charset è stato utilizzato dal prog vecchio, quindi ho fatto diverse prove sostituendo al CP1250 i vari CP850, CP852,..., latin1, latin2 e altri, ne ho provato circa 20, i caratteri letti cambiano ma non sono mai quelli giusti.
Ho provato pure a mettere nel prog vecchio:
Codice: [Seleziona]
showmessage(MySQL50Connection1.CharSet)
ma non visualizza niente.

per adesso grazie a tutti per le risposte, continuo a sbatterci la testa.

Nota: I dati non sono stati scritti poi tanto tempo fa, la vers. 2.0.6 avrà circa 6-7 anni. Quest'estate ho convertito meglio da Delphi3-Paradox.
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: DragoRosso - Novembre 12, 2024, 05:27:56 pm
I dati sono stati scritti probabilmente nel codepage della lingua usata al momento, che era lo standard per tutti gli applicati che non erano UNICODE.

Ma, essendo stati solo scritti a un solo carattere, ossia senza combinazioni UTF-8, sicuramente il DB non li ha convertiti in UTF8, li ha presi così come sono (fatto salvo i caratteri di "controllo" per certi valori sopra il codice ASCII 140 che possono alterare in lettura gli stessi caratteri).

Quindi dovrebbe essere relativamente semplice trovare la codifica giusta ....

Mi riesci a passare i valori esadecimali della stringa che leggi e i caratteri che dovrebbero essere visualizzati ... in cinque minuti dovrei risolverti il problema.

Basta anche che copi uno screenshot del debgger con i valori esadecimali (o anche decimali se ti và meglio), sempre però con i caratteri equivalenti che dovrebbero apparire nell'ordine.
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: tito_livio - Novembre 12, 2024, 06:15:45 pm
Basta anche che copi uno screenshot del debgger con i valori esadecimali (o anche decimali se ti và meglio), sempre però con i caratteri equivalenti che dovrebbero apparire nell'ordine.

Mi potresti spiegare come si fa a far apparire il debbugger con i valori esadecimali della stringa?
Scusami ma io i valori in esadecimali non li guardo ed adesso non mi appaiono.

Edit:
se ad esempio fai un backup - che in fondo è uno script SQL - al suo interno puoi trovare sia le varie "CREATE" che le "INSERT"...

Fatto, questo è quello che compare: DEFAULT CHARSET=latin1. Ottenuto con un dump del database.
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: nomorelogic - Novembre 12, 2024, 06:34:47 pm
se usi windows è quindi certo che il charset usato dal DB sia CP1250
quindi dovresti assicurarti che quando ti connetti come client, lo fai con lo stesso charset
quando dici che già usi
Codice: [Seleziona]
MySQL50Connection1.CharSet := 'CP1250';
dovrebbe funzionare...

per curiosità, nel backup, se guardi nelle INSERT le lettere accentate sono corrette vero?
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: tito_livio - Novembre 12, 2024, 07:41:32 pm
se usi windows è quindi certo che il charset usato dal DB sia CP1250
quindi dovresti assicurarti che quando ti connetti come client, lo fai con lo stesso charset
quando dici che già usi
Codice: [Seleziona]
MySQL50Connection1.CharSet := 'CP1250';
dovrebbe funzionare...

per curiosità, nel backup, se guardi nelle INSERT le lettere accentate sono corrette vero?
Ho provato a mettere quella istruzione, impostando il charset cp1250, ma non funziona, lettere illegibili. Anche nel Backup le lettere appaiono illeggibili.

Da notare che se eseguo nel lazarus nuovo:
Codice: [Seleziona]
showmessage(inttostr(sqlquery1descriz.CodePage))
ottengo 1252.
Nel lazarus vecchio (2.0.6) questa proprietà non esiste.
Poi se imposto, sempre nel nuovo:
Codice: [Seleziona]
MySQL50Connection1.CharSet := 'CP1252';
mi da errore:
Failed to set connection character set: Can't initialize character set cp1252 in c:\program Files\MySql\MySql server 5.0\share\charsets\
E in effetti in quella cartella CP1252.xml non c'è mentre ci sono altri codepage come cp1250,cp1252 ecc.
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: DragoRosso - Novembre 12, 2024, 09:44:17 pm
Mi potresti spiegare come si fa a far apparire il debbugger con i valori esadecimali della stringa?
Scusami ma io i valori in esadecimali non li guardo ed adesso non mi appaiono.

Metti un breakpoint dopo l'assegnazione, quando il programma si ferma selezioni la variabile e con il tasto destro del mouse vai a DEBUG / AGGIUNGI A WATCH.

Vai nella finestra di WATCH e seleziona l'espressione, poi premi il tasto in alto "chiave inglese-cacciavite" e imposta la finestra di set come nell'allegato.

"RIPETI CONTEGGIO" DEVI VALORIZZARLO CON LA LUNGHEZZA DELLA STRINGA (ANCHE SE IL VALORE ECCEDE NON IMPORTA).
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: tito_livio - Novembre 12, 2024, 10:58:25 pm
Mi riesci a passare i valori esadecimali della stringa che leggi e i caratteri che dovrebbero essere visualizzati ... in cinque minuti dovrei risolverti il problema.
Ok grazie per la spiegazione, avevo capito un'altra cosa.
In allegato ho messo lo screenshot per i valori della variabile in esadecimale.
Il valore che dovrebbe visualizzare è: àèìòù @€#

Invece visualizza altri caratteri strani. Per quello che ho trovato in rete la vecchia codifica dovrebbe essere cp1252 o win-1252 che dovrebbe essere la stessa cosa.
Sempre grazie per la tua disponibilità,
ciao

Aggiungo: non ho messo la colonna data address ma risulta vuota come nel tuo esempio
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: bonmario - Novembre 13, 2024, 08:24:18 am
Codice: [Seleziona]
MySQL50Connection1.CharSet := 'CP1252';
mi da errore:
Failed to set connection character set: Can't initialize character set cp1252 in c:\program Files\MySql\MySql server 5.0\share\charsets\
E in effetti in quella cartella CP1252.xml non c'è mentre ci sono altri codepage come cp1250,cp1252 ecc.

Prova a vedere se con questa risolvi:
Codice: [Seleziona]
  function ConvertiStringa(St: String; TipoConvStr: TTipoOperConvStr): String;
  begin
    {$IFDEF MSWINDOWS}
      case TipoConvStr of
        tocLeggi: St:={CP1252ToUTF8(St)}WinCPToUTF8(St);
        tocScrivi:  St:={UTF8ToCP1252(St)}UTF8ToWinCP(St);
      end;
    {$ENDIF}
    Result:=St;
  end;

Di solito era la mia ultima spiaggia quando non avevo più voglia di sbatterci la testa...
Per usarla, devi aggiungere "LazUTF8" alla uses.

P.S. Se non funziona con tocLeggi, prova con tocScrivi


Ciao, Mario
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: DragoRosso - Novembre 13, 2024, 10:00:21 am
In allegato ho messo lo screenshot per i valori della variabile in esadecimale.
Il valore che dovrebbe visualizzare è: àèìòù @€#

I valori passati sono una combinazione già UTF-8 con "caratteri di controllo", per aggiungere una dieresi ad esempio ad una lettera normale.
Quella stringa è già stata elaborata e non è usabile.

Ma scusa, i dati che hai presentato sono stati inseriti con il vecchio programma ?

A questo punto non saprei aiutarti, sembra che ciò che leggi dal DB venga codificato in UTF-8 con il nuovo Lazarus. Però il problema è che i dati interni probabilmente sono in caratteri standard ANSI.

Prova a cercare in rete, se hai questo problema sicuramente anche qualcun altro l'ha avuto.

Mi sembra comunque molto strano ciò che accade, dovrebbe avere colpito tantissime applicazioni.

N.B.: comunque i dati dovrebbe "essere" in formato CP-1252 o Windows-1252 in quanto alcuni caratteri che hai presentato esistono solo in quelle codifiche.
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: tito_livio - Novembre 13, 2024, 11:21:36 am

Ma scusa, i dati che hai presentato sono stati inseriti con il vecchio programma ?

A questo punto non saprei aiutarti, sembra che ciò che leggi dal DB venga codificato in UTF-8 con il nuovo Lazarus. Però il problema è che i dati interni probabilmente sono in caratteri standard ANSI.

Prova a cercare in rete, se hai questo problema sicuramente anche qualcun altro l'ha avuto.

Mi sembra comunque molto strano ciò che accade, dovrebbe avere colpito tantissime applicazioni.

N.B.: comunque i dati dovrebbe "essere" in formato CP-1252 o Windows-1252 in quanto alcuni caratteri che hai presentato esistono solo in quelle codifiche.

Cerca e ricerca credo di aver capito cosa è successo.

Fra la versione 2.0.8 e la versione 2.0.10 gli sviluppatori Lazarus decidono di trattare le stringhe non più in Codepage ma in UTF8.
Che il modo di memorizzare le stringhe sia cambiato lo si può dedurre da: https://wiki.freepascal.org/String (https://wiki.freepascal.org/String).
Io non cambio spesso la versione di Lazarus perché ad ogni cambio ci sono parecchie cose da risistemare ma ogni tanto si deve fare.
In altri miei progetti avevo inserito un comando del tipo:
Codice: [Seleziona]
MySQL50Connection1.CharSet := 'utf8';
fin dalle prime versioni quindi non mi sono accorto di niente anche compilando con un nuovo Lazarus.
In questo vecchio progetto avevo lasciato fare a Lazarus, quindi il programma scriveva e leggeva in CP1252.
I dati che ti ho presentato erano stati scritti col vecchio programma, il nuovo programma assume che siano stati scritti in UTF8 quindi, quando legge, li decodifica con l'algoritmo sbagliato.
Ci sono anche altri che sono rimasti "fregati" da questo cambiamento (che credo giusto anche se doloroso), come si può vedere da: https://forum.lazarus.freepascal.org/index.php/topic,53250.0.html?PHPSESSID=8bn5bmfl99i3s8poqo6ht6dn63 (https://forum.lazarus.freepascal.org/index.php/topic,53250.0.html?PHPSESSID=8bn5bmfl99i3s8poqo6ht6dn63).
Non credo sia possibile impostare Lazarus moderno per fargli trattare le stringhe in codepage, per cui col nuovo programma mi andrò a fare una routine di conversione.
Per questa conversione c'è il modo suggerito da @bonmario e un altro nell'ultimo link che ho messo, vedrò di mettere su qualcosa.

Vi faccio sapere,
ciao
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: DragoRosso - Novembre 13, 2024, 11:48:23 am
Citazione
You can fight the Lazarus system and declare your stings as being of a certain codepage and use RawByteString to prevent the compiler form doing unwanted codepage conversion. But in the long run, you better go with the flow.

Questo può essere il tuo cavallo di battaglia....

P.S: da google traduttore  ;D
Citazione
Puoi combattere il sistema Lazarus e dichiarare i tuoi sting come appartenenti a una certa codepage e usare RawByteString per impedire al form del compilatore di effettuare conversioni indesiderate di codepage. Ma a lungo termine, è meglio seguire il flusso.
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: nomorelogic - Novembre 13, 2024, 04:51:47 pm
quando creo i database in MySql cerco di crearli in utf8.
Poi lancio le seguenti istruzioni da client
Codice: [Seleziona]
  
  FConnection.CreateStatement.Execute('SET NAMES ''utf8''');
  FConnection.CreateStatement.Execute('SET CHARACTER SET ''utf8''');
  FConnection.CreateStatement.Execute('SET character_set_client = ''utf8''');
  FConnection.CreateStatement.Execute('SET character_set_database = ''utf8''');
  FConnection.CreateStatement.Execute('SET collation_connection = ''utf8mb4_unicode_ci''');

in questo link trovi della documentazione
https://dev.mysql.com/doc/refman/8.4/en/set-character-set.html

Spero possa essere utile
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: DragoRosso - Novembre 13, 2024, 05:22:26 pm
quando creo i database in MySql cerco di crearli in utf8.

Comunque crei i DB, il risultato dipende da cosa ci metti dentro.
Se il vecchio sw scriveva in ANSI e leggeva in ANSI (ossia senza codifica) i dati nel db sono (dovrebbero essere, non conosco molto MySQL) diciamo in ANSI.

Quando li leggi con il nuovo compilato, lui cerca di leggere un UTF-8 generando quando visto sopra (è una mia ipotesi).

Usando come viene detto dalla wiki di Lazarus il tipo "rawstring" in lettura, ipoteticamente dovrebbero essere riportati i dati in ANSI così come scritti.

Io in passato usavo ANSI (c'erano ancor ai CP), poi quando ho mi sono scontrato con lingue diverse dall'inglese e l'italiano sono passato in UTF-8 e da li in poi non ho mai avuto più problemi. Ti parlo ormai di 15 anni fà, anzi sicuramente di più visto che Delphi non era ancora Unicode (forse era BDS2006 a naso). Da allora ho dimenticato il tutto perchè uso solo UTF-8 per tutto ciò che và in esterno (file di configurazione, scambio dati, DB).
Rimane solo l'ASCII per i dispositivi vecchio stile tipo i seriali. o i dispositivi embedded. Ma li si usano SEMPRE e SOLO caratteri da 0 a 127.

Ciao
Titolo: Re:Caratteri non più leggibili con le nuove versioni di Lazarus
Inserito da: tito_livio - Novembre 14, 2024, 12:46:04 am
Alla fine ho deciso convertire gli archivi per averli in utf8.
Come consigliato da @bonmario utilizzo l'istruzione:
Codice: [Seleziona]
nuova_stringa:=UTF8ToWinCP(vecchia_stringa)
e poi salvo nuova_stringa nel suo campo del db, ovviamente usando la unit lazutf8.
Poi,da questo momento in poi, il nuovo programma leggerà le stringhe correttamente.
C'è però da fare attenzione ai caratteri inseriti nei vecchi programmi usando alt-xxx, a me è capitato un ≥ che la funzione ha tradotto con un =, per cui, in questi casi ho dovuto fare una traduzione mia personalizzata.
Le vocali accentate, l'€ ed il ° invece vengono tradotte per bene.
Grazie per l'aiuto,
alla prossima