Support for exchange of wide-character strings is still under 
consideration. The functions dealing with 8-bit character strings return 
failure when operating on a wide-character atom or Prolog string object. 
The functions below can extract and unify both 8-bit and wide atoms and 
string objects. Wide character strings are represented as C arrays of 
objects of the type pl_wchar_t, which is guaranteed to be 
the same as wchar_t on platforms supporting this type. For 
example, on MS-Windows, this represents a 16-bit UTF-16 string, while 
using the GNU C library (glibc) this represents 32-bit UCS4 characters.
- atom_t PL_new_atom_wchars(size_t 
len, const pl_wchar_t *s)
- Create atom from wide-character string as PL_new_atom_nchars() 
does for ISO-Latin-1 strings. If s only contains ISO-Latin-1 
characters a normal byte-array atom is created. If len is (size_t)-1, 
it is computed from s using wcslen(). See PL_new_atom() 
for error handling.
- const pl_wchar_t* PL_atom_wchars(atom_t 
atom, size_t *len)
- Extract characters from a wide-character atom. Succeeds on any atom 
marked as‘text’. If the underlying atom is a wide-character 
atom, the returned pointer is a pointer into the atom structure. If the 
atom is represented as an ISO-Latin-1 string, the returned pointer comes 
from Prolog's‘buffer stack’(see section 
12.4.14).
- bool PL_get_wchars(term_t 
t, size_t *len, pl_wchar_t **s, unsigned flags)
- Wide-character version of PL_get_chars(). 
The flags argument is the same as for PL_get_chars(). 
Note that this operation may return a pointer into Prolog's‘buffer 
stack’(see section 
12.4.14).
- bool PL_put_wchars(term_t 
-t, int type, size_t len, const pl_wchar_t *s)
- Put text from a wide character array in t. Arguments 
are the same as PL_unify_wchars().220The 
current implementation uses PL_put_variable() 
followed by PL_unify_wchars().
- bool PL_unify_wchars(term_t 
+t, int type, size_t len, const pl_wchar_t *s)
- Unify t with a textual representation of the C wide-character 
array s. The type argument defines the Prolog 
representation and is one of PL_ATOM,PL_STRING,PL_CODE_LISTorPL_CHAR_LIST.
- bool PL_unify_wchars_diff(term_t 
+t, term_t -tail, int type, size_t len, const pl_wchar_t *s)
- Difference list version of PL_unify_wchars(), 
only supporting the types PL_CODE_LISTandPL_CHAR_LIST. 
It serves two purposes. It allows for returning very long lists from 
data read from a stream without the need for a resizing buffer in C. 
Also, the use of difference lists is often practical for further 
processing in Prolog. Examples can be found inpackages/clib/readutil.cfrom the source distribution.