The following NLS API needs to recognize EUDC characters.
MultiByteToWideChar
If the multibyte character string contains an EUDC character, this function will map the EUDC character to a character position in the Unicode Private Use Zone.
MultiByteToWideChar will preserve the round trip mapping from a code page to Unicode and back to the original code page of EUDC characters. If an EUDC character from code page 932 is mapped to Unicode, then mapped from Unicode to another code page with an EUDC range, it's likely that the original 932 EUDC character will be mapped to a different EUDC character in the destination code page. If Unicode data, which uses code points within the Unicode Private Use Zone, is mapped to a code page which has an EUDC range defined, it is possible that this Unicode data will be mapped into the code pages EUDC range.
If the wide character string contains a character in the Unicode Private Use Zone, this function maps it to its multibyte character counterpart, if such a mapping exists. The codepage specified in this function must contain an EUDC code range for the mapping to occur. If it does not, the function will return the default character for any characters in the Unicode Private Use Zone.
WideCharToMultiByte will preserve the round trip mapping from a code page to Unicode and back to the original code page of EUDC characters. If an EUDC character from code page 932 is mapped to Unicode, then mapped from Unicode to another code page with an EUDC range, it's likely that the original 932 EUDC character will be mapped to a different EUDC character in the destination code page. If Unicode data, which uses code points within the Unicode Private Use Zone, is mapped to a code page which has an EUDC range defined, it is possible that this Unicode data will be mapped into the code pages EUDC range.
CompareStringA maps EUDC characters to character positions in the Unicode Private Use Zone and then CompareStringA deals the characters in the Unicode Private Use Zone according to the following schema.
There is a new script member value defined to represent all of the codepoints in the Unicode Private Use Zone. This value shall be greater than all other script membership values. The code points within this script membership will have alpha-numeric weights such that they will be sorted in numerical Unicode code point order. They will have no other linguistic weights associated with them. See the NLS API spec for more information on sorting.
Only LCMAP_SORTKEY effects for EUDC characters.
Any CTYPE information about EUDC characters returns NULL.