C# XML中十六进制字符的解决方案
string filePath = "c://data.xml";
string str = "sa,,wer";
try
{
XElement root = new XElement(new XElement(str));
root.Save(filePath);
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
上面的代码是我写的简单事例,实际中我是得到的字符串要写入xml。
实际中不能采用去除特殊字符的方法,如str1="123,123" str2="123/123" 如果去除特殊字符,那么str1和str2将都变为"123123",无法区分。想问问看谁有好的解决方案,如果转码的话,用那种比较好,最好能把解决的代码贴上来,谢谢了 C#?XML?LINQ?十六进制
[解决办法]
使用CDATA,或者做一个BASE64编码。
[解决办法]
对于特殊字符可以用base64编码后写入,读取时解码即可
[解决办法]
你在名称中定义符号肯定是不可以的。节点名称不允许有特殊字符的。
属性值,节点值才可以。
[解决办法]
public static string XmlEncode(string s)
{
s = s.Replace("&", "&");
for (int i = 0; i < 32; i++)
{
s = s.Replace(((char)i).ToString(), "&#" + i + ";");
}
for (int i = 95; i < 97; i++)
{
s = s.Replace(((char)i).ToString(), "&#" + i + ";");
}
return s;
}
public static string ReXmlEncode(string s)
{
s = s.Replace("&", "&");
for (int i = 0; i < 32; i++)
{
s = s.Replace("&#" + i + ";", ((char)i).ToString());
}
for (int i = 95; i < 97; i++)
{
s = s.Replace("&#" + i + ";", ((char)i).ToString());
}
return s;
}
/// <summary>
/// 把一个字符串中的 低序位 ASCII 字符 替换成 &#x 字符
/// 转换 ASCII 0 - 8 -> � - 
/// 转换 ASCII 11 - 12 ->  - 
/// 转换 ASCII 14 - 31 ->  - 
/// </summary>
/// <param name="tmp"></param>
/// <returns></returns>
public static string ReplaceLowOrderASCIICharacters(string tmp)
{
StringBuilder info = new StringBuilder();
foreach (char cc in tmp)
{
int ss = (int)cc;
if (((ss >= 0) && (ss <= 8))
[解决办法]
((ss >= 11) && (ss <= 12))
[解决办法]
((ss >= 14) && (ss <= 32)))
info.AppendFormat("", ss);//&#x{0:X};
else info.Append(cc);
}
return info.ToString();
}