Why is the following code failing ?
I have picked
Characters.Latin_1.Reserved_128 on purpose.
-- File 'print_non_graphic_character.adb' with Ada.Characters.Latin_1; with Ada.Text_IO; with Ada.Strings.Unbounded; procedure Print_Non_Graphic_Character is Text_String : constant String := "Non Graphic Character: " & Ada.Characters.Latin_1.Reserved_128; Text_Unbounded_String : constant Ada.Strings.Unbounded.Unbounded_String := Ada.Strings.Unbounded.To_Unbounded_String (Text_String); begin Ada.Text_IO.Put_Line (Text_String); Ada.Text_IO.Put_Line (Ada.Strings.Unbounded.To_String (Text_Unbounded_String)); Ada.Text_IO.Put_Line (Text_Unbounded_String'Image); end Print_Non_Graphic_Character;
Note that it also fails with:
Ada.Text_IO.Put_Line (Ada.Strings.Unbounded.Unbounded_String'Image (Text_Unbounded_String));
-- File 'print_non_graphic_character.gpr' project Print_Non_Graphic_Character is for Main use ("print_non_graphic_character.adb"); for Object_Dir use ".objs"; package Compiler is -- "-Og" -- Optimize for debug -- "-g" -- Generate debug info for Default_Switches ("Ada") use ("-g", "-gnat2020", "-Og"); end Compiler; package Binder is for Switches ("Ada") use ("-Es"); -- Symbolic traceback end Binder; end Print_Non_Graphic_Character;
It gives me with GNAT 12.2.0
Non Graphic Character: � Non Graphic Character: � raised ADA.STRINGS.UTF_ENCODING.ENCODING_ERROR : bad input at Item (25) [./non_graphic_character/.objs/print_non_graphic_character] 0x40e8fb Ada.Strings.Utf_Encoding.Raise_Encoding_Error at a-stuten.adb:126 0x40f38b Ada.Strings.Utf_Encoding.Strings.Decode at a-suenst.adb:163 0x4049a8 Print_Non_Graphic_Character at print_non_graphic_character.adb:13 0x404efa Main at b__print_non_graphic_character.adb:279 [/lib/x86_64-linux-gnu/libc.so.6] 0x7f5e62118d08 [./non_graphic_character/.objs/print_non_graphic_character] 0x404658 _start at ??? 0xfffffffffffffffe
It is annoying because, when I want to print a record which is commposed with
Unbounded_String, I cannot use the
'Image attribute because of the above error and have to print each field and use
Unbounded_String (which is annoying to have when I couple that with generic functions/packages).