Problème d'encodage des noms de fichers avec accents

Auteur Message
Emmanuel Sens a écrit : 
Bonjour Zen.

Coucou ! Salut!
Bonjour.

Je me disais, avec le vent, que tu viendrais jusqu'ici.
Merci pour la visite... Bravo !
Bonjour, je reprend cette page parce qu'il me manque le caractère € dans mon programme.

Impossible en effet de le saisir. Apparemment une espace est insérée à la place (mais rien de moins certain)

Je compile avec l'option -gnatW8 mon système et en en_En.UTF-8.
Les caractère accentués sont bien traités (je suis gentil).

Enigmatique pour moi.

Merci pour votre réponse.
Peux‑tu essayer avec -gnatW ? As‑tu vérifié qu’un BOM UTF‑8 est bien présent au début du fichier source ?
Bonjour Hibou,

J'ai essayé -gnatW, c'est un switch invalide.

Et je n'ai pas encore de fichier, je saisie simplement le caractère avec Wide_Text_Io.Get_Immediate, sur l'entrée standard.


Par contre j'ai fait une erreur je suis en_US.UTF-8 en fait.
Bonjour ou Re- bonjour...

J'utilise Ansi_Console.
Donc j'ai transformé ce paquetage pour qu'il traite des Wide_String avec des Wide_Character.

J'affiche à présent le caractère €.

Je ne sais pas si j'ai bien fait.

En tout cas j'ai encore un nouveau problème du coup ;
A chaque rafraîchissement de l'écran, le curseur s'affiche un peu partout à l'ecran, et a lourdement ralentie le programme.

J'ai du faire une bêtise.

Bref je cherche encore des solutions.
Emmanuel Sens a écrit : 
[…]

Par contre j'ai fait une erreur je suis en_US.UTF-8 en fait.

Ça, c’est la langue des messages, n’en tiens pas compte. Ce qu’il faut vérifier, c’est la présence du BOM UTF‑8. La variable d’environnement LC_ALL, ne force pas l’encodage pour les éditeurs de textes, qui peuvent enregistrer avec un autre encodage et avec ou sans BOM, et c’est pour cela qu’il faut vérifier.

Quel éditeur de texte utilises‑tu ?
Emmanuel Sens a écrit : 
Bonjour ou Re- bonjour...

J'utilise Ansi_Console.
Donc j'ai transformé ce paquetage pour qu'il traite des Wide_String avec des Wide_Character.

[…]

Ce paquet est antérieur à Ada 2012.

Je le réviserai un jour, mais je ne promet aucune date. Je te préviendrai ici, si un jour prochain c’est fait.
Je suis pas dans un éditeur, je suis dans un programme avec Ada.

J'ai trouvé le procédure qui alourdi le système.

C'est ma procédure Draw_Window, je j'ai retapé 2 fois.
1 fois pour que je puisse spécifier la taille d'écran voulue.
1 fois pour gérer les Wide_String au lieu des String.

J'ai viré le code de Draw_Window, ça affiche impécable, mais je n'ai plus les fenêtres.

Donc ma procédure Draw Window à présent c'est :

Source ada : 

procedure Draw_Window (W : in Window_Type)
is
type Frame_Component_Enum is (
Top_Left_Corner,
Top_Right_Corner,
Bottom_Right_Corner,
Bottom_Left_Corner,
Horizontal_Border,
Vertical_Border
);
Frame_Component : constant
array (Frame_Type_Enum, Frame_Component_Enum) of Wide_Character := (
-- Double_Line_Frame => (
-- Top_Left_Corner => Character'Val(201),
-- Top_Right_Corner => Character'Val(187),
-- Bottom_Right_Corner => Character'Val(188),
-- Bottom_Left_Corner => Character'Val(200),
-- Horizontal_Border => Character'Val(205),
-- Vertical_Border => Character'Val(186)),
-- Single_Line_Frame => (
-- Top_Left_Corner => Character'Val(218),
-- Top_Right_Corner => Character'Val(191),
-- Bottom_Right_Corner => Character'Val(217),
-- Bottom_Left_Corner => Character'Val(192),
-- Horizontal_Border => Character'Val(196),
-- Vertical_Border => Character'Val(179)));
Double_Line_Frame => (
Top_Left_Corner => Wide_Character'Val(43),
Top_Right_Corner => Wide_Character'Val(43),
Bottom_Right_Corner => Wide_Character'Val(43),
Bottom_Left_Corner => Wide_Character'Val(43),
Horizontal_Border => Wide_Character'Val(45),
Vertical_Border => Wide_Character'Val(124)),
Single_Line_Frame => (
Top_Left_Corner => Wide_Character'Val(43),
Top_Right_Corner => Wide_Character'Val(43),
Bottom_Right_Corner => Wide_Character'Val(43),
Bottom_Left_Corner => Wide_Character'Val(43),
Horizontal_Border => Wide_Character'Val(45),
Vertical_Border => Wide_Character'Val(124)));

Client_Background : constant Wide_Character := ' ';
Close_Box_Symbol : constant Wide_Character := 'X';
-- Pourrait être aussi Character'Val(254)
begin
if not Fit_In_Screen (W.L, W.C, W.H, W.W) then raise Metric_Error;
end if;

if W.W < 5 then raise Metric_Error;
end if;

if W.H < 2 then raise Metric_Error;
end if;

Set_Text_Color (W.Frame_Color);

-- Bottom side
Draw_Buffer (W.C) :=
Frame_Component (W.Frame_Type, Bottom_Left_Corner);
for i in 2 .. W.W - 1 loop
Draw_Buffer ((W.C - 1) + i) :=
Frame_Component (W.Frame_Type, Horizontal_Border);
end loop;
Draw_Buffer ((W.C - 1) + W.W) :=
Frame_Component (W.Frame_Type, Bottom_Right_Corner);
Move_Cursor_To ((W.L - 1) + W.H, W.C);
Put (Draw_Buffer (W.C..(W.C - 1) + W.W));

-- Top side
Draw_Buffer (W.C) :=
Frame_Component (W.Frame_Type, Top_Left_Corner);
-- Draw_Buffer ((W.C - 1) + W.W - 3) := '[';
-- Draw_Buffer ((W.C - 1) + W.W - 2) := 'X'; -- Character'Val(254);
-- Draw_Buffer ((W.C - 1) + W.W - 1) := ']';
-- Draw_Buffer ((W.C - 1) + W.W) :=
-- Frame_Component (W.Frame_Type, Top_Right_Corner);
Move_Cursor_To (W.L, W.C);
Put (Draw_Buffer (W.C..(W.C - 1) + W.W));

-- Middle
Draw_Buffer (W.C) :=
Frame_Component (W.Frame_Type, Vertical_Border);
for i in 2 .. W.W - 1 loop
Draw_Buffer ((W.C - 1) + i) := Client_Background;
end loop;
Draw_Buffer ((W.C - 1) + W.W) :=
Frame_Component (W.Frame_Type, Vertical_Border);
for i in 2..W.H - 1 loop
Move_Cursor_To ((W.L - 1) + i, W.C);
Put (Draw_Buffer (W.C..(W.C - 1) + W.W));
end loop;
end;
Zut, je ne parviens pas à écrire un simple fichier avec un € dedans.

Si je crée un fichier avec un € dedans après lorsque je lis le fichier dans mon shell avec la commande "cat" j'ai : ["20AC"].

Même si je met un BOM_8 avant.