Sfondo: UTF-16 rappresenta una sequenza di caratteri Unicode ("code point") come una sequenza di "unità di codice" a 16 bit. Per i caratteri i cui valori scalari si adattano entro 16 bit (vale a dire quelli da U + 0000 a U + FFFF), l'unità di codice ha lo stesso valore del carattere; ma per i caratteri esterni all'intervallo (quelli da U + 10000 a U + 10FFFF), UTF-16 deve utilizzare due unità di codice. Per farlo funzionare, Unicode riserva un intervallo di punti codice (da U + D800 a U + DFFF) come "sostituti", che non possono essere utilizzati come caratteri; UTF-16 può quindi utilizzare due di questi surrogati insieme per rappresentare un punto di codice al di fuori dell'intervallo di 16 bit. ("Alto" e "basso" si riferiscono a surrogati che servono come unità prima e secondo unità di codice in queste coppie, Ciascuno surrogato è un surrogato elevato o un surrogato basso, ma non entrambi, esperienza con gli anziani i set di caratteri hanno mostrato che è molto utile sapere sempre dove finisce un personaggio e inizia il successivo.)
Quindi il problema che stai vedendo è che stai cercando di creare un UnicodeScalar
con un valore (U + DFCC) che, secondo lo standard Unicode, è riservato a non essere un scalare Unicode. U + DFCC è definito per non esistere ed è solo un "surrogato" per metà di uno scalare che esiste.
Per evitare questo problema, è necessario attenersi agli scalari che esistono — da U + 0000 a U + D7FF e da U + E000 a U + 10FFFF.
Si prega di mostrare un po 'di codice. – ruakh
@ruakh: fatto. Aggiunto valore di esempio. –