<para>The &ECL; implementation of strings is ANSI Common-Lisp compliant. There are basically four string types as shown in <xreflinkend="table.ansi.strings"/>. As explained in <xreflinkend="ansi.characters"/>, when Unicode support is disabled, <type>character</type> and <type>base-character</type> are the same type and the last two string types are equivalent to the first two.</para>

<tablexml:id="table.ansi.strings">

<title>&CommonLisp; string types</title>

<tgroupcols="2">

<thead>

<row>

<entry>Abbreviation</entry>

<entry>Expanded type</entry>

<entry>Remarks</entry>

</row>

</thead>

<tbody>

<row>

<entry><type>string</type></entry>

<entry><type>(array character (*))</type></entry>

<entry>8 or 32 bits per character, adjustable.</entry>

</row>

<row>

<entry><type>simple-string</type></entry>

<entry><type>(simple-array character (*))</type></entry>

<entry>8 or 32 bits per character, not adjustable nor displaced.</entry>

</row>

<row>

<entry><type>base-string</type></entry>

<entry><type>(array base-char (*))</type></entry>

<entry>8 bits per character, adjustable.</entry>

</row>

<row>

<entry><type>simple-base-string</type></entry>

<entry><type>(simple-array base-char (*))</type></entry>

<entry>8 bits per character, not adjustable nor displaced.</entry>

</row>

</tbody>

</tgroup>

</table>

<para>It is important to remember that strings with unicode characters can only be printed readably when the external format supports those characters. If this is not the case, &ECL; will signal a <type>serious-condition</type>. This condition will abort your program if not properly handled.</para>