* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Novembre 21, 2024, 10:25:57 am

Inserisci il nome utente, la password e la durata della sessione.

97 Visitatori, 0 Utenti

Autore Topic: [Risolto] Caratteri non più leggibili con le nuove versioni di Lazarus  (Letto 1716 volte)

tito_livio

  • Full Member
  • ***
  • Post: 173
  • Karma: +4/-0
Re:Caratteri non più leggibili con le nuove versioni di Lazarus
« Risposta #15 il: 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
« Ultima modifica: Novembre 12, 2024, 11:02:36 pm da tito_livio »

bonmario

  • Hero Member
  • *****
  • Post: 1358
  • Karma: +11/-1
Re:Caratteri non più leggibili con le nuove versioni di Lazarus
« Risposta #16 il: 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

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:Caratteri non più leggibili con le nuove versioni di Lazarus
« Risposta #17 il: 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.
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

tito_livio

  • Full Member
  • ***
  • Post: 173
  • Karma: +4/-0
Re:Caratteri non più leggibili con le nuove versioni di Lazarus
« Risposta #18 il: 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.
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.
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

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:Caratteri non più leggibili con le nuove versioni di Lazarus
« Risposta #19 il: 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.
« Ultima modifica: Novembre 13, 2024, 11:50:16 am da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2921
  • Karma: +20/-4
Re:Caratteri non più leggibili con le nuove versioni di Lazarus
« Risposta #20 il: 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
Imagination is more important than knowledge (A.Einstein)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:Caratteri non più leggibili con le nuove versioni di Lazarus
« Risposta #21 il: 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
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

tito_livio

  • Full Member
  • ***
  • Post: 173
  • Karma: +4/-0
Re:Caratteri non più leggibili con le nuove versioni di Lazarus
« Risposta #22 il: 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
« Ultima modifica: Novembre 14, 2024, 01:05:29 am da tito_livio »

 

Recenti

How To

Utenti
  • Utenti in totale: 803
  • Latest: maXim.FI
Stats
  • Post in totale: 19169
  • Topic in totale: 2286
  • Online Today: 117
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 97
Total: 97

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.