* * * *

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.
Maggio 02, 2024, 04:31:11 pm

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

515 Visitatori, 1 Utente
 

Autore Topic: Come visualizzare i caratteri accentati  (Letto 3784 volte)

Wolfenstein

  • Newbie
  • *
  • Post: 9
  • Karma: +0/-0
Come visualizzare i caratteri accentati
« il: Aprile 20, 2015, 12:49:41 pm »
Ciao a tutti,

se eseguo del codice in modalità Consolle e voglio mostrare a video i nostri caratteri accentati ( tipo è, à, ì ecc... ) questi non appaiono, ed al loro posto vengono visualizzati dei simboli strani. Penso che sia dovuto all'UNICODE, però non so come risolvere questa anomalia.
Di seguito incollo un piccolo esempio:

Codice: [Seleziona]
program Test;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

begin
  Writeln('Questo è Free Pascal e Lazarus');
  Writeln('Premi il tasto enter per chiudere');
  Readln;
end.

Qualcuno mi sa dire cosa devo fare ?
Grazie.

Wolfenstein

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:Come visualizzare i caratteri accentati
« Risposta #1 il: Aprile 20, 2015, 02:22:46 pm »
Aggiungi una chiamata a SetConsoleOutputCP:

Codice: [Seleziona]
program Test;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, windows
  { you can add units after this };   
begin
  setconsoleoutputcp(65001);
  Writeln('Questo è Free Pascal e Lazarus');
  Writeln('Premi il tasto enter per chiudere');
  Readln;
end.

L'unico problema è che si tratta di una funzione di windows. Per le altre piattaforme non saprei :/

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2871
  • Karma: +20/-4
Re:Come visualizzare i caratteri accentati
« Risposta #2 il: Aprile 20, 2015, 03:29:41 pm »
ho provato sotto linux x64 e l'accento viene mostrato correttamente

Edit:
Forse potresti modificare il sorgente proponendolo (segnalando magari che è un tuo adattamento dovuto al fatto che in Italia ci sono le lettere accentate) come segue.

Forse così si complica un po' il codice e bisogna aggiungere anche qualche spiegazione ma, dopotutto, è una guida per imparare a programmare agli italiani...

Codice: [Seleziona]
program Test;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  {$IFDEF WINDOWS}
  windows,
  {$ENDIF}
  Classes
  { you can add units after this };
begin
  {$IFDEF WINDOWS}
  setconsoleoutputcp(65001);
  {$ENDIF}
  Writeln('Questo è Free Pascal e Lazarus');
  Writeln('Premi il tasto enter per chiudere');
  Readln;
end.
« Ultima modifica: Aprile 20, 2015, 03:36:42 pm da nomorelogic »
Imagination is more important than knowledge (A.Einstein)

Wolfenstein

  • Newbie
  • *
  • Post: 9
  • Karma: +0/-0
Re:Come visualizzare i caratteri accentati
« Risposta #3 il: Aprile 20, 2015, 05:05:01 pm »
Grazie a te ed a Legolas,

sotto Linux non l'ho testato in quanto da parecchi anni ormai lavoro praticamente solo sotto Windows; dato che si tratta di una specifica espressamente "italiana", inserita in un contesto di traduzione in italiano, penso che possa bastare una nota iniziale di spiegazione per giustificare le modifiche apportate ai sorgenti.
Tra l'altro non ha nessun impatto "pratico" sul codice "esecutivo".

Wolfenstein

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2871
  • Karma: +20/-4
Re:Come visualizzare i caratteri accentati
« Risposta #4 il: Aprile 20, 2015, 05:28:59 pm »
sotto Linux non l'ho testato in quanto da parecchi anni ormai lavoro praticamente solo sotto Windows;

ok, tieni comunque in considerazione che la tua traduzione potrebbe essere letta anche da chi usa linux ;)
Imagination is more important than knowledge (A.Einstein)

Jor11

  • Newbie
  • *
  • Post: 20
  • Karma: +0/-0
  • La soluzione del problema e sempre davanti agli occhi ma molte volte non la vediamo e scegliamo la strada piu lunga e complicata
Re:Come visualizzare i caratteri accentati
« Risposta #5 il: Maggio 16, 2015, 07:58:39 am »
Ciao wolfenstein, potresti anche usare i caratteri ascii. Ti riporto un piiccolo esempio:
program esempio;
begin
writeln(chr(138));{scrive è}
end.
jor11

Wolfenstein

  • Newbie
  • *
  • Post: 9
  • Karma: +0/-0
Re:Come visualizzare i caratteri accentati
« Risposta #6 il: Maggio 24, 2015, 12:16:42 pm »
Ciao a tutti,
Dopo aver fatto diversi tentativi mi trovo ancora al punto di partenza; non capisco se sono io che sto sbagliando o meno.
Usando la Funzione SetConsoleOutputCP alla quale ho provato ad assegnare sia il valore 65001 che il valore 850 continuo ad ottenere sempre il solito output errato.
Lo stesso se aggiungo prima della chiamata a SetConsoleOutputCP la chiamata alla funzione SetConsoleCP .
Leggendo le specifiche della funzione SetConsoleOutputCP su MSDN di Microsoft ho trovato questa nota:
"However, if the current font is a raster font, SetConsoleOutputCP does not affect how extended characters are displayed".
Forse è questo che rende ininfluente l'azione di SetConsoleOutputCP ?
Io lavoro sotto Windows 8.1 a 64Bit ed uso Lazarus 1.2.6.
Ho provato quindi ad inserire direttamente la chiamata ad un carattere della tabella ASCII come suggerito da igor e la cosa funziona; infatti l'istruzione:
Writeln('Questo '+ chr(138) +' Free Pascal e Lazarus');
mi restituisce la stringa di testo "Questo è Free Pascal e Lazarus" correttamente.
Pensate che sia il caso di usare questo metodo per la visualizzazione corretta dei caratteri accentati ?

Grazie.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2871
  • Karma: +20/-4
Re:Come visualizzare i caratteri accentati
« Risposta #7 il: Maggio 24, 2015, 04:26:48 pm »
internamente, in memoria, la stringa è rappresentata bene ma sembra che il font della console non sia in grado di visualizzare i caratteri utf8.

prova a dare un'occhiata a questo thread
http://forum.lazarus.freepascal.org/index.php?topic=13949.0

fai anche delle prove con Writeln(Utf8ToConsole('àéìòù'));

Imagination is more important than knowledge (A.Einstein)

Wolfenstein

  • Newbie
  • *
  • Post: 9
  • Karma: +0/-0
Re:Come visualizzare i caratteri accentati
« Risposta #8 il: Maggio 24, 2015, 07:34:58 pm »
Niente da fare.
Tra l'altro, UTF8ToConsole richiede la Unit FileUtil che non sembra essere presente nel mio PC.
Ho provato a ricostruire Lazarus senza ottenere nulla.
Ho disinstallato Lazarus, cancellato le varie directory e lo ho reinstallato usando l'ultima versione (1.4.0) ma niente da fare.
Comincio a scoraggiarmi.

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18785
  • Topic in totale: 2237
  • Online Today: 543
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 1
Guests: 515
Total: 516

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.