2012-02-06 8 views
10

quiero guardar los datos Unicode en la base de datos de la cadena XML utilizando este código:Insertar datos Unicode de cadena XML a 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; 
} 

pero al guardar tabla de datos en la base de datos de mi carácter Unicode aparecen con signo de interrogación (? ??????)

La intercalación de mi base de datos es correcta y otros caracteres Unicode se almacenan correctamente.

pido disculpas a usted debido a la mala redacción Inglés :)

+5

favor adjunte código para guardar los datos en la base de datos que ha escrito. – Maheep

+0

¿Qué tipo de base de datos está usando? MySQL, SQL Server, MS Access? ¿Qué versión? Además, muéstrenos la definición de tabla que resulta de este código. Estoy particularmente interesado en el conjunto de caracteres de la tabla y de la base de datos. –

+0

Aparte de los comentarios anteriores, también intente utilizar alguna otra fuente para verificar el contenido de la base de datos. Es posible que los datos se almacenen correctamente, pero la fuente en la que se está procesando no incluye algunos de los caracteres y el software que está utilizando para ver los datos vuelve a los marcadores de posición '?'. No es la explicación más probable, pero es lo suficientemente fácil de verificar para que valga la pena;) –

Respuesta

1

Voy a empezar la sesión con una conjetura.

Su base de datos, o su tabla, utiliza un juego de caracteres que no está lleno de Unicode. Los caracteres que se almacenan como signos de interrogación son caracteres que están fuera de la base de datos o conjunto de caracteres de la tabla. Los caracteres que se almacenan correctamente se encuentran dentro de la base de datos o conjunto de caracteres de la tabla.

Como alternativa, tiene sus objetos XMLDocument() o que están convirtiendo los caracteres que leen en un conjunto de caracteres que es menos de Unicode completo.

Proporcione la información adicional solicitada por los comentarios, y veré si puedo mejorar esta respuesta.

0

Por lo general, esto ocurre cuando el texto de origen no se almacena como Unicode. Por ejemplo, si lee sus datos xml de un archivo de texto, y el archivo de texto se almacena como Ansi (usando la página de códigos), o se almacena como archivo Unicode sin BOM (Marca de orden de bytes, o firma), cuando lee su texto el archivo, los caracteres no ASCII pueden no leerse correctamente.
Para solucionar esto, abra su archivo xml fuente en un editor de texto (por ejemplo Notepad++) y cambie su codificación a Unicode o UTF-8, y luego guarde el archivo.
También puede abrir el archivo en el Bloc de notas y guardar el archivo como Unicode (Archivo/Guardar como -> Codificación: Unicode o UTF-8). Asegúrese de que cuando abre su archivo en el bloc de notas, los caracteres se muestran correctamente.

0

uso XmlTextReader para leer el xml y verificar si el error persiste

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