2012-02-06 11 views
10

voglio salvare i dati Unicode in database da stringa XML utilizzando questo codice:Inserire Unicode dati da stringa XML per Datatable

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml(xmlText); 

using (XmlNodeReader xmlReader = new XmlNodeReader(xmlDoc)) 
{ 
     DataTable dt = new DataTable(); 
     dt.TableName = "sms"; 
     dt.Columns.Add("rowID"); 
     dt.Columns.Add("origAddr"); 
     dt.Columns.Add("time"); 
     dt.Columns.Add("message"); 
     dt.ReadXml(xmlReader); 
     return dt; 
} 

ma quando salvo DataTable in banca dati il ​​mio carattere unicode appaiono con il punto interrogativo (? ??????)

Le regole di confronto del mio database sono corrette e altri caratteri Unicode sono archiviati correttamente.

Mi scuso con voi a causa di una cattiva scrittura inglese :)

+5

Si prega di allegare il codice per salvare i dati nel database che hai scritto. – Maheep

+0

Che tipo di database stai usando? MySQL, SQL Server, MS Access? Quale versione? Inoltre, mostraci la definizione della tabella risultante da questo codice. Sono particolarmente interessato al set di caratteri della tabella e del database. –

+0

Oltre ai commenti precedenti, prova anche a usare un altro font per controllare il contenuto del database. È possibile che i dati siano effettivamente archiviati correttamente, ma il font su cui viene eseguito il rendering non include alcuni caratteri e qualsiasi software utilizzato per visualizzare i dati ricade su '? Non è la spiegazione più probabile, ma abbastanza facile da verificare che ne valga la pena;) –

risposta

1

Comincerò cose fuori con un'ipotesi plausibile.

Il database o la tabella utilizza un set di caratteri non Unicode completo. I caratteri che vengono memorizzati come punti interrogativi sono caratteri che si trovano all'esterno del set di caratteri del database o della tabella. I caratteri che vengono memorizzati correttamente si trovano all'interno del database o del set di caratteri della tabella.

In alternativa, gli oggetti XMLDocument() o DataTable() convertono i caratteri letti in un set di caratteri inferiore a Unicode completo.

Fornisci le informazioni aggiuntive richieste dai commenti e vedrò se riesco a migliorare questa risposta.

0

In genere ciò accade quando il testo sorgente non viene memorizzato come Unicode. Ad esempio, se si leggono i dati xml da un file di testo e il file di testo è archiviato come Ansi (utilizzando la codepage) o è archiviato come file Unicode senza BOM (Byte Order Mark o signature), quando si legge il testo file, i caratteri non ASCII potrebbero non essere letti correttamente.
Per risolvere questo problema, aprire il file XML di origine in un editor di testo (ad esempio Notepad++) e modificare la codifica in Unicode o UTF-8, quindi salvare il file.
È anche possibile aprire il file in Blocco note e salvare il file come Unicode (File/Salva con nome -> Codifica: Unicode o UTF-8). Assicurarsi che quando si apre il file nel blocco note, i caratteri vengano visualizzati correttamente.

0

uso XmlTextReader per leggere il codice XML e verificare se l'errore persiste

XmlTextReader stream = new XmlTextReader(_pathXml); 
    while (stream.Read()) 
    { 
     //TODO save each element 
    }