问题描述
DataTable转XML奇怪字符.自己拼接的DataTable,转换为XML后没问题。但是插入Oracle之后就出现中文的问号。非常郁闷。今天终于解决了。privatestringConvertDataTableToXML(DataTablexmlDS){MemoryStreamms=null;XmlTextWriterXmlWt=null;try{ms=newMemoryStream();//根据ms实例化XmlWtXmlWt=newXmlTextWriter(ms,Encoding.UTF8);//获取ds中的数据xmlDS.WriteXml(XmlWt);intcount=(int)ms.Length;byte[]temp=newbyte[count];ms.Seek(0,SeekOrigin.Begin);ms.Read(temp,0,count);//返回UTF-8编码的文本UTF8Encodingucode=newUTF8Encoding();stringreturnValue=ucode.GetString(temp).Trim();returnreturnValue;}catch(Exception){return"";}finally{//释放资源if(XmlWt!=null){XmlWt.Close();ms.Close();ms.Dispose();}}}这里是有问题的代码。我发现在XML前面有一个奇怪字符。所以将数据流从第三个字符开始取,就没问题了。代码中改为:ms.Seek(3,SeekOrigin.Begin);解决!
解决方案
解决方案二:
出现中文的问号-》那是乱码。
解决方案三:
//返回UTF-8编码的文本你查下数据库是什么字符集或许是gb2312感觉你的问题在于转成了UTF-8
解决方案四:
引用1楼duanzi_peng的回复:
出现中文的问号-》那是乱码。
不是乱码,在Windows字符集下都没问题。我断点获取字符串,拷贝到Txt文本,Word中都没有任何异常。但是粘帖到PLSql中就出现一个奇怪的小点点。Insert到Oralce就出现一个中文的问号了。
解决方案五:
引用2楼byronqiji的回复:
//返回UTF-8编码的文本你查下数据库是什么字符集或许是gb2312感觉你的问题在于转成了UTF-8
不是因为转成了UTF-8的原因这里是解决后的代码:privatestringConvertDataTableToXML(DataTablexmlDS){MemoryStreamms=null;XmlTextWriterXmlWt=null;try{ms=newMemoryStream();//根据ms实例化XmlWtXmlWt=newXmlTextWriter(ms,Encoding.UTF8);//获取ds中的数据xmlDS.WriteXml(XmlWt);intcount=(int)ms.Length-3;byte[]temp=newbyte[count];ms.Seek(3,SeekOrigin.Begin);ms.Read(temp,0,count);//返回UTF-8编码的文本UTF8Encodingucode=newUTF8Encoding();stringreturnValue=ucode.GetString(temp).Trim();returnreturnValue;}catch(Exception){return"";}finally{//释放资源if(XmlWt!=null){XmlWt.Close();ms.Close();ms.Dispose();}}}
解决方案六:
这很正常!显然你的XML文件用记事本之类的低档文本编辑器编辑过用于是保存为utf-8编码的,所以有一个3字节的BOM(efbbbf)
解决方案七:
用于是由于之误由于是保存为utf-8编码的,所以有一个3字节的BOM