2009-12-18 2 views
2

Ma demande recevoir des chaînes de l'extérieur et construire un document XMLPourquoi l'API .NET XML ne me protège pas du caractère nul?

string fromOutside = "\0"; 
XAttribute a = new XAttribute(fromOutside); 

lorsque la valeur d'attribut contient le caractère nul alors je suis exception en essayant de sauver XML sur le disque (quand il va en XmlWriter)

System.ArgumentException : '.', hexadecimal value 0x00, is an invalid character. 

Même la classe SecurityElement ne permet pas

Assert.IsFalse(SecurityElement.IsValidAttributeValue("\0")); 

Quel est le meilleur façon de construire le document XML à partir de chaînes qui peuvent contenir des caractères invalides tels que caractère nul, etc.?

Répondre

2

Vous ne pouvez pas échapper les caractères non imprimables tels que NULL car aucun caractère d'échappement équivalent n'est défini pour eux. Vous ne pouvez pas le représenter sauf si vous avez des fragments codés HEX ou Base64. Ainsi, Base64 peut soit encoder la chaîne, soit s'assurer qu'elle ne contient pas de caractères non imprimables.

string fromOutside = "\0"; 
string base64Encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(fromOutside)); 
XAttribute a = new XAttribute("id", base64Encoded); 
+1

Donc, dans mon cas, la seule façon est d'analyser la chaîne et de supprimer null personnages, n'est-ce pas? :-( –

+0

Non, vous pouvez également Base64 encoder la chaîne: 'Convert.ToBase64String (Encoding.UTF8.GetBytes (fromOutside))' –

+1

Base64 n'est pas une option pour moi, car je dois garder la chaîne lisible dans le résultat XML L'exemple de la chaîne peut être "\ 0Mon \ 0 fantaisie val \ 0ue \ 0 \ 0 \ 0" –

Questions connexes