关于gb2312编码的xml解析
来源:互联网 发布:windows安全配置手册 编辑:程序博客网 时间:2024/05/17 07:58
在ios项目中遇到这样一个问题,需要读取远程的xml文件,进行解析,但是目标xml是gb2312编码的,用System.Text.Encoding.GetEncoding("gb2312")并不奏效。提示“Encoding name 'GB2312' not supported”,查了下才知道GetEncoding只支持下面四个属性:
utf-8UTF8Encoding utf-16UnicodeEncoding (Little-endian)utf-16BEUnicodeEncoding (Big-endian)utf-16LE
后来查了下才知道,ios中不支持gb2312编码,需要另寻他法。最终找到了,文件下载:http://pan.baidu.com/s/1mgDgb48
下载解压出来是2个文件,放入你的程序中,demo代码如下:
private void DownloadXML(string coursenumber) { var webClient = new WebClient(); webClient.DownloadStringCompleted += (s, e) = >{ var text = e.Result; text = text.Replace("=\"gb2312\"", "=\"UTF-8\""); string localFilename = "cc.xml"; string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); string localPath = Path.Combine(documentsPath, localFilename); File.WriteAllText(localPath, text); InvokeInBackground(() = >{ //XmlDocument doc = new XmlDocument (); //doc.Load (localPath); //XElement xe = XElement.Load (localPath); //var x = xe.Elements ("course").Cast<CourseVido.Course> (); Console.WriteLine("ok"); }); }; string xmlurl = string.Format("http://......./mobile/{0}/MP4/lessonPAD.xml", coursenumber); Gb2312Encoding GB2312 = new Gb2312Encoding(); webClient.Encoding = GB2312; webClient.DownloadStringAsync(new Uri(xmlurl));}
另一处理方式:
//下载文件WebClient client = new WebClient (); //Gb2312Encoding gb2312 = new Gb2312Encoding ();//client.Encoding = gb2312;client.DownloadFile (xmlurl, localPath);Stream str = client.OpenRead (xmlurl);//StreamReader reader = new StreamReader (str);byte[] mbyte = new byte[str.Length + 1];int allmybyte = mbyte.Length;int startmbyte = 0;while (allmybyte > 0) {int m = str.Read (mbyte, startmbyte, allmybyte);if (m == 0)break;startmbyte += m;allmybyte -= m;}//编码处理Gb2312Encoding gb2312 = new Gb2312Encoding ();string chinesestr = gb2312.GetString (mbyte, 0, mbyte.Length);chinesestr = chinesestr.Replace ("=\"gb2312\"", "=\"UTF-8\"");File.WriteAllText (localPath, chinesestr);str.Close ();//读取xml对象XmlSerializer serializer = new XmlSerializer (typeof(CourseVido.course));using (TextReader reader = new StreamReader (localPath)) {result = serializer.Deserialize (reader) as CourseVido.course;}return result;
0 0
- 关于gb2312编码的xml解析
- DataSet生成gb2312编码的xml
- 掌间无限—Android 解析gbk、gb2312编码的xml文件
- 关于 dom4j 解析 XML 时的编码问题
- 关于C#GB2312编码问题
- GB2312的编码规则
- GB2312的编码规则
- GB2312的编码规则
- 关于ZendStudio网页编码UTF-8和GB2312的问题
- 关于ZendStudio网页编码UTF-8和GB2312的问题
- 关于编码ansi、GB2312、unicode与utf-8的区别
- 关于编码ansi、GB2312、unicode与utf-8的区别
- 关于编码ansi、GB2312、unicode与utf-8的区别
- 关于编码ansi、GB2312、unicode与utf-8的区别
- 关于编码ansi、GB2312、unicode与utf-8的区别
- 关于编码ansi、GB2312、unicode与utf-8的区别
- 关于ZendStudio网页编码UTF-8和GB2312的问题
- 关于编码ansi、GB2312、unicode与utf-8的区别
- IOS7.1 因为xxx证书无效 (企业证书发布的app)
- iOS setCompletionBlock 异步请求
- 一步步学习WPF纯后台实现带checkbox的Treeview
- 递归实现求两数最大公约数
- 拖延症
- 关于gb2312编码的xml解析
- mybatis控制台显示sql语句
- SQL语句(IN、NOT IN、COUNT、GROUP BY)
- jax-ws之webservice security(安全)教程第三天
- 黑马程序员--java基础--java语法基础
- 前端开发中需要用到的变换矩阵(2D游戏适用)
- 数据库中的左连接(left join)和右连接(right join)区别
- GPIO驱动模型
- Yahoo,Msn,Skype,QQ在线聊天链接接口调用