Scrittura, mapping e ordinamento di caratteri EUDC e PUA

Le applicazioni scrivono caratteri definiti dall'utente finale (EUDCs) e caratteri dell'area di utilizzo privato (PUA) sullo schermo o sulla stampante così come scrivono altri caratteri, usando funzioni di output come TextOut e ExtTextOut. Queste funzioni recuperano automaticamente le informazioni sui caratteri carattere DELL'EUDC o PUA se EUDC è abilitato. Per altre informazioni, vedere End-User_Defined e Private Use Area Characters.For more information, see End-User_Defined and Private Use Area Characters.

Quando si scrivono caratteri EUDC o PUA, l'operazione della funzione di output del testo dipende dal tipo di carattere attualmente selezionato. Se il tipo di carattere selezionato è un carattere di carattere EUDC o PUA integrato, la funzione recupera le informazioni sui caratteri da tale tipo di carattere. Se il tipo di carattere selezionato è un tipo di carattere TrueType a byte doppio (DBCS) che ha un carattere EUDC separato associato, la funzione recupera informazioni dal tipo di carattere EUDC specificato. Analogamente, se il tipo di carattere selezionato è un tipo di carattere TrueType Unicode con un carattere di carattere PUA separato, la funzione recupera le informazioni dal carattere di carattere PUA. Se il tipo di carattere selezionato non ha un carattere EUDC o PUA associato, la funzione recupera le informazioni dal tipo di carattere EUDC predefinito del sistema. Se il carattere non è nel tipo di carattere EUDC predefinito del sistema o non esiste un carattere EUDC predefinito del sistema, la funzione scrive il carattere predefinito definito dal tipo di carattere selezionato.

Le applicazioni possono eseguire il mapping degli EUDC a e da Unicode usando le funzioni MultiByteToWideChar e WideCharToMultiByte . La funzione MultiByteToWideChar esegue il mapping della maggior parte degli EUDC ai caratteri nell'interfaccia puA Unicode. Tuttavia, per supportare determinati standard nazionali o regionali, alcuni codici EUDC possono essere mappati a punti di codice Unicode non PUA. La funzione WideCharToMultiByte esegue il mapping di un carattere nel puA alla controparte EUDC, se tale mapping esiste e se il punto di codice non ha un mapping non PUA valido in Unicode. Non tutte le pagine codici hanno un intervallo EUDC. La tabella codici specificata in una chiamata a WideCharToMultiByte deve contenere un intervallo di codice EUDC per il mapping all'intervallo EUDC da eseguire. Se la tabella codici non contiene un intervallo di codice EUDC, la funzione recupera il carattere predefinito per tutti i caratteri nell'interfaccia puA Unicode.

MultiByteToWideChar e WideCharToMultiByte non garantiscono il mapping round trip. In altre parole, è possibile iniziare con una determinata stringa multibyte contenente EUDC, eseguire il mapping della stringa a Unicode con MultiByteToWideChar e eseguirne il mapping al DBCS originale con WideCharToMultiByte e terminare con un risultato non identico alla stringa originale. Le applicazioni che si basano sul mapping degli EUDC a Unicode devono garantire che tutti i caratteri necessari possano eseguire il round trip tra l'area EUDC della tabella codici appropriata e l'interfaccia puA Unicode.

Le applicazioni non devono tentare di eseguire il mapping degli EUDC da una tabella codici a un'altra. Se un'applicazione inizia con un EUDC da una tabella codici, la esegue il mapping a Unicode con MultiByteToWideChar e esegue il mapping a un databaseCS diverso con WideCharToMultiByte, non sono disponibili garanzie sui risultati. Il carattere originale potrebbe essere mappato a un EUDC diverso nella tabella codici di destinazione oppure potrebbe essere mappato come carattere non definito. Analogamente, il mapping di una stringa Unicode a una tabella codici con un intervallo EUDC può avere risultati imprevisti. Se la stringa Unicode contiene un punto di codice PUA, è possibile che il punto di codice venga mappato a un EUDC che non rappresenta lo stesso carattere.

Le applicazioni possono confrontare le stringhe DBCS che contengono EUDC usando la versione ANSI della funzione CompareString . La funzione esegue in modo efficace il mapping dei caratteri a Unicode prima di confrontare i valori dei caratteri. Le applicazioni possono creare una chiave di ordinamento per la stringa usando la versione ANSI della funzione LCMapString e il valore LCMAP_SORTKEY. Questa funzione esegue in modo efficace il mapping dei caratteri a Unicode per primo. Tutti i caratteri nel puA vengono ordinati dopo tutti gli altri caratteri Unicode. All'interno dell'area, i caratteri vengono ordinati in ordine numerico. Se un'applicazione tenta di recuperare le informazioni CTYPE per un EUDC usando la funzione GetStringTypeA , la funzione recupera NULL per ogni carattere.

Uso di set di caratteri e Unicode