Non sono sicuro di capire davvero la tua domanda.
In .NET, quando si dispone di un oggetto stringa, non è necessario preoccuparsi di codifiche diverse. Tutte le stringhe .NET utilizzano la stessa codifica: Unicode (o più precisamente: UTF-16).
Le codifiche di testo diverse entrano in gioco solo quando si ruota un oggetto stringa in una sequenza di byte (ad esempio per scriverlo in un file di testo) o viceversa. Presumo che tu stia parlando di questo. Per convertire una sequenza di byte da una codifica a un altro, si potrebbe scrivere:
byte[] input = ReadInput(); // e.g. from a file
Encoding decoder = Encoding.GetEncoding("encoding of input");
string str = decoder.GetString(input);
Encoding encoder = Encoding.GetEncoding("encoding of output");
byte[] ouput = encoder.GetBytes(str);
Naturalmente è necessario sostituire encoding of input
e encoding of output
con i nomi di codifica corretta. MSDN ha un list of all supported encodings.
È necessario conoscere la codifica dell'input, per convenzione o in base ai metadati o qualcosa del genere. Non puoi determinare/indovinare in modo affidabile una codifica sconosciuta, ma ci sono alcuni trucchi ed euristiche che potresti applicare. Vedi How can I detect the encoding/codepage of a text file.
Edit:
"U + xxxx" è come di solito si fa riferimento a uno specifico punto di codice Unicode (il numero assegnato a un carattere Unicode), ad esempio, il punto di codice della lettera "A" (capitale latino A) è U + 0041.
La stringa di input è effettivamente "\\U+1043...
" (backslash, barra rovesciata, maiuscola U, ecc.) Oppure è visualizzata solo in questo modo, ad es. in una finestra del debugger? Se è il primo, qualcuno ha commesso un errore durante la codifica del testo, magari tentando di scrivere un letterale Unicode e accidentalmente sfuggire al backslash scrivendo un secondo (Edit2: oppure i caratteri sono stati deliberatamente salvati in modo escape per scriverli in un file/stream codificato in ASCII/ecc.). Per quanto ne so, le classi di codifica .NET non ti aiutano qui; è necessario analizzare la stringa a mano.
A proposito, i numeri nell'esempio sono strani. Nella notazione standard, il numero dopo "U +" è un numero esadecimale, non un numero decimale. Ma se si leggono i punti del codice come numeri esadecimali si riferiscono a personaggi di sistemi di script completamente indipendenti (Burmese, Mkhedruli georgiano, Hangul Jamo); leggere come numeri decimali si riferiscono tutti a lettere cirilliche, però.
Edit3: di analizzarlo, bene, cercare sottostringhe in forma \\U+xxxx
(con x essere una cifra), convertire xxxx
ad un int n
, creare un char con quel punto di codice (Char.ConvertFromUtf32(n)
) e sostituire l'intero sottostringa di quel carattere.
sai cosa deve contenere il file o parte del file dopo una conversione riuscita? – Jodrell
di alien, intendi qualche altra codifica sconosciuta – Jodrell
> di alien, vuoi dire qualche altra codifica sconosciuta sì – psct