博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[UWP小白日记-7]转换MVA学院的XML字幕为SRT (二)
阅读量:5953 次
发布时间:2019-06-19

本文共 4045 字,大约阅读时间需要 13 分钟。

原文:

瞎扯淡

  上个版本,非常蠢用来N多的循环导致非常卡性能烂得不行,这次使用XmlDocument类来读取XML字幕

其实根本不用各种扒XML字幕,好吧我这是学习使用XmlDocument类,嗯就是这个样子的。(⊙﹏⊙)b

正文

  其实这个小程序,关键就是读取文件的时候要正确的转码,应为系统TXT文本默认使用的是ANIS编码,而XmlDocument使用的是UTF8。

不转码妥妥的乱码。

    先来看下成品,最后我会打包为APP供大家使用的。

拖拽代码

这个没什么好说的很简单,TIPS:Drop事件是最后唯一能拿到拖拽数据的机会了。

private void ListView_DragOver(object sender, DragEventArgs e)        {            e.AcceptedOperation = DataPackageOperation.Copy;            e.DragUIOverride.Caption = "可以接受TXT和XML格式的MVA字幕文件";            e.DragUIOverride.IsCaptionVisible = true;            e.DragUIOverride.IsContentVisible = true;            e.DragUIOverride.IsGlyphVisible = true;        }

 

List
pathList = new List
();//路径集合 StorageFolder newStorF = ApplicationData.Current.LocalCacheFolder;//把文件复制到零时文件 StorageFile newSfile; private async void ListView_Drop(object sender, DragEventArgs e) { if (e.DataView.Contains(StandardDataFormats.StorageItems)) { var def = e.GetDeferral(); var items = await e.DataView.GetStorageItemsAsync(); if (items.Count > 0) { foreach (var item in items) { sfile = item as StorageFile; if (sfile.FileType == ".txt" | sfile.FileType == ".xml") { var changeNewSfilePaht = Path.ChangeExtension(sfile.Path, ".xml"); newSfile = await sfile.CopyAsync(newStorF, Path.GetFileName(changeNewSfilePaht), NameCollisionOption.ReplaceExisting); listItems.Add(new Item { ID = listItems.Count + 1, fileName = newSfile.Name,statIcon=0 }); pathList.Add(newSfile.Path); } } } #endregion def.Complete(); } }

转码输出

UWP撸掉了Encoding.Default。又没有内置GB2312的Encoding,只能自己注册一个GB2312了,其他编码类似。

 

    #region 注册GB2312            EncodingProvider provider = CodePagesEncodingProvider.Instance;            Encoding.RegisterProvider(provider);            Encoding gb2312 = Encoding.GetEncoding("gb2312");       #endregion

 

  

 

 

///         /// XML转SRT,且合并为一个格式化为SRT的list        ///         ///         /// 
private async void XMLtoSRT(string path) { List
beginAttribute = new List
();//开始时间 List
endAttribute = new List
();//结束时间 List
text = new List
();//节点文本类容 List
sumStringList = new List
(); //最终格式完毕的字符列表 #region 注册GB2312 EncodingProvider provider = CodePagesEncodingProvider.Instance; Encoding.RegisterProvider(provider); Encoding gb2312 = Encoding.GetEncoding("gb2312");       #endregion var content = File.ReadAllText(path, gb2312); byte[] tempG = gb2312.GetBytes(content); byte[] utf8 = Encoding.Convert(gb2312, Encoding.UTF8, tempG); string utf8str = Encoding.UTF8.GetString(utf8); XmlDocument document = new XmlDocument(); document.LoadXml(utf8str); var templist = document.GetElementsByTagName("p"); foreach (XmlNode p in templist) { beginAttribute.Add(p.Attributes["begin"].Value); endAttribute.Add(p.Attributes["end"].Value); text.Add(p.InnerText.Trim()); } //输出 var tempPath = Path.ChangeExtension(path, ".SRT"); StorageFile newsfile3 = await storageFolder.CreateFileAsync(Path.GetFileName(tempPath), CreationCollisionOption.GenerateUniqueName); //还可以添加设置字体大小、颜色、字体等功能 using (var stream1 = await newsfile3.OpenStreamForWriteAsync()) { StreamWriter sw = new StreamWriter(stream1, Encoding.UTF8); for (int i = 0; i < beginAttribute.Count; i++) { sw.Write(i + 1 + "\r\n" + beginAttribute[i] + "-->" + endAttribute[i] + "\r\n" + text[i] + "\r\n" + "\r\n"); } sw.Dispose(); } }

 虽然StreamWriter被各位小伙伴都玩坏了,蛋还是要提醒就是最后要调用:Dispose()方法施放魔鬼。

最后吐槽

  不得不吐槽,直接拖文件夹到VS里只有文件夹没有里面的类容,可见资产设置个图片打个包都各种报错,这尼玛都UPDATA3了,难道有生之年系列吗?

下载APP请到下面的源代码页面

项目开源

 

 

转载地址:http://tmoxx.baihongyu.com/

你可能感兴趣的文章
微软发布.NET Core Tools 1.0版本
查看>>
PHP常用函数之字符串处理
查看>>
又拍云沈志华:如何打造一款安全的App
查看>>
Rust 1.27支持SIMD
查看>>
“10%时间”:优点和缺点——敏捷海滩会议上Elizabeth Pope的报告
查看>>
关于“Fluent UI”或Ribbon Design报道的补充说明
查看>>
2018年终盘点:“年度爆款”的区块链真的结束了吗?
查看>>
51信用卡 Android自动埋点实践
查看>>
敏捷现状10周年调查
查看>>
PHP Session可能会引起并发问题
查看>>
AI产品开发的核心原则:以研究为核心驱动
查看>>
大规模集群中Docker镜像如何分发管理?试试Uber刚开源的Kraken
查看>>
WinDocks发布Windows版本的Docker引擎
查看>>
完美解决html中select的option不能隐藏的问题。
查看>>
推荐5大开源工具,用于开发Kubernetes项目
查看>>
制定2015年的移动开发策略
查看>>
JPA 2.2改进了易用性
查看>>
从蚂蚁金服实践入手,带你深入了解 Service Mesh
查看>>
24周年,“常青树”Delphi发布新版本10.3.1
查看>>
7. 从数据库获取数据- 从零开始学Laravel
查看>>