Condividi tramite


Scrittura, mappatura e ordinamento dei caratteri EUDC e PUA

Le applicazioni scrivono caratteri definiti dall'utente finale (EUDC) e caratteri dell'area di utilizzo privato (PUA) sullo schermo o sulla stampante esattamente come scrivono altri caratteri, usando funzioni di output come TextOut e ExtTextOut. Queste funzioni recuperano automaticamente le informazioni sui caratteri dai caratteri EUDC o PUA se EUDC è abilitato. Per altre informazioni, vedere End-User_Defined e Caratteri dell'area di uso privato.

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 tipo 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 set di caratteri a byte doppio (DBCS) Tipo di carattere TrueType associato con un tipo di carattere EUDC associato, la funzione recupera informazioni dal tipo di carattere EUDC specificato. Analogamente, se il tipo di carattere selezionato è un Unicode tipo di carattere TrueType associato con un tipo di carattere PUA separato, la funzione recupera informazioni dal tipo 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 è incluso nel tipo di carattere EUDC predefinito del sistema o non esiste alcun tipo di carattere EUDC predefinito per il sistema, la funzione scrive il carattere predefinito definito dal tipo di carattere selezionato.

Le applicazioni possono mappare gli EUDC da e verso Unicode utilizzando le funzioni MultiByteToWideChar e WideCharToMultiByte . La funzione MultiByteToWideChar esegue il mapping della maggior parte degli EUDC ai caratteri nell'area di uso privato Unicode. Tuttavia, per supportare determinati standard nazionali o regionali, è possibile eseguire il mapping di alcuni EUDC a punti di codice Unicode non PUA. La funzione WideCharToMultiByte esegue la mappatura di un carattere nell'area di utilizzo privato (PUA) alla controparte EUDC, se tale mappatura esiste e se il punto di codice non ha una mappatura valida al di fuori dell'area di utilizzo privato in Unicode. Non tutte le tabelle codici hanno un intervallo EUDC. La tabella codici specificata in una chiamata a WideCharToMultiByte deve contenere un intervallo di codici EUDC affinché si possa effettuare il mapping all'intervallo EUDC. Se la tabella codici non contiene un intervallo di codici EUDC, la funzione recupera il carattere predefinito per tutti i caratteri nell'applicazione pua Unicode.

MultiByteToWideChar e WideCharToMultiByte non garantiscono il mapping di andata e ritorno. In altre parole, è possibile iniziare con una determinata stringa multibyte contenente EUDC, eseguire il mapping della stringa a Unicode con MultiByteToWideChar ed eseguirne il mapping al DBCS originale con WideCharToMultiBytee terminare con un risultato non identico alla stringa originale. Le applicazioni che si basano sul mapping di EUDC a Unicode devono garantire che tutti i caratteri necessari possano fare il round-trip tra l'area EUDC della tabella codici appropriata e l'area di uso privato Unicode (PUA).

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 pagina di codice, esegue il mapping a Unicode con MultiByteToWideChared esegue il mapping a un DBCS diverso con WideCharToMultiByte, non vi sono 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 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 innanzitutto il mapping dei caratteri a Unicode. Tutti i caratteri nel pua vengono ordinati dopo tutti gli altri caratteri Unicode.All characters in the PUA are sorted after all other Unicode characters. All'interno dell'area, i caratteri vengono ordinati in ordine numerico. Se un'applicazione tenta di recuperare informazioni CTYPE per un EUDC usando la funzione GetStringTypeA, la funzione recupera NULL per ogni carattere.

Uso di Unicode e set di caratteri