瞎扯淡

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

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

正文

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

不转码妥妥的乱码。

    先来看下成品,最后我会打包为APP供大家使用的。(GIF录制工具ScreenToGif,开源并且使用的是WPF开发,有兴趣的可以研究下下的)

拖拽代码

这个没什么好说的很简单,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<string> pathList = new List<string>();//路径集合
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

  

/// <summary>
/// XML转SRT,且合并为一个格式化为SRT的list
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
private async void XMLtoSRT(string path)
{ List<String> beginAttribute = new List<String>();//开始时间
List<String> endAttribute = new List<String>();//结束时间
List<String> text = new List<string>();//节点文本类容
List<string> sumStringList = new List<string>(); //最终格式完毕的字符列表 #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请到下面的源代码页面

项目开源

GIT

[UWP小白日记-7]转换MVA学院的XML字幕为SRT (二)的更多相关文章

  1. [UWP小白日记-5]转换MVA学院的XML字幕为SRT

    开源地址:第二版开源地址GIT 暂时用不了了,在最新的WIN10 10586.494系统上回闪退,正在酝酿第二版 O(∩_∩)O哈哈~ 新版已经完工:第二版 地方MVA上好多教程,但是微软的所有中国网 ...

  2. [UWP小白日记-9]页面跳转过度动画(二)

    又打算动手写了 [UWP小白日记-6]页面跳转过度动画 上次写的,这次随着学习的进度使用新的玩法. 最近在搞GIT的学习,结果把好好的项目玩坏,都不知道当时是怎么想的拿在写的APP来玩GIT,害我重写 ...

  3. 小白日记18:kali渗透测试之缓冲区溢出实例(二)--Linux,穿越火线1.9.0

    Linux系统下穿越火线-缓冲区溢出 原理:crossfire 1.9.0 版本接受入站 socket 连接时存在缓冲区溢出漏洞. 工具: 调试工具:edb: ###python在漏洞溢出方面的渗透测 ...

  4. 小白日记9:kali渗透测试之主动信息收集(二)四层发现:TCP、UDP、nmap、hping、scapy

    四层发现 四层发现的目的是扫描出可能存活的IP地址,四层发现虽然涉及端口扫描,但是并不对端口的状态进行精确判断,其本质是利用四层协议的一些通信来识别主机ip是否存在. 四层发现的优点: 1.可路由且结 ...

  5. 小白日记8:kali渗透测试之主动信息收集(二)三层发现:ping、traceroute、scapy、nmap、fping、Hping

    三层发现 三层协议有:IP以及ICMP协议(internet管理协议).icmp的作用是用来实现intenet管理的,进行路径的发现,网路通信情况,或者目标主机的状态:在三层发现中主要使用icmp协议 ...

  6. 小白日记3:kali渗透测试之被动信息收集(二)-dig、whios、dnsenum、fierce

    一.DIG linux下查询域名解析有两种选择,nslookup或者dig.Dig(Domain Information Groper)是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,M ...

  7. [UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)

    前言 本文中,您将创建一个通用应用程序(UWP),使用Entity Framework Core(Entity Framework 7)框架在SQLite数据库上执行基本的数据访问. 准备: Enti ...

  8. [UWP小白日记-15]在UWP手机端实时限制Textbox的输入

    说实话重来没想到验证输入是如此的苦逼的一件事情.     网上好多验证都是在输入完成后再验证,我的想法是在输入的时候就限制输入,这样我就不用再写代码来验证了 应为是手机端,所以不用判断其他非法字符,直 ...

  9. [UWP小白日记-8]一些零碎的东西

    设置启动窗口大小 直接上代码了没什么好解释的了,既然能设置最小,那铁定就能设置最大 public MainPage() { //设定窗口启动显示大小 ApplicationView.Preferred ...

随机推荐

  1. oracle中sql语句的优化

    oracle中sql语句的优化 一.执行顺序及优化细则 1.表名顺序优化 (1) 基础表放下面,当两表进行关联时数据量少的表的表名放右边表或视图: Student_info   (30000条数据)D ...

  2. jQuery 1.9 移除了 $.browser 的替代方法

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support . 在更新的 2.0 版本中,将不再支持 IE 6/7/8. ...

  3. IP地址规划和设计方法

    IP地址规划和设计方法 无类域间路由技术需要在提高 IP 地址利用率和减少主干路由器负荷两个方面取得平衡 网络地址转换 NAT 最主要的应用是专用网,虚拟专用网,以及 ISP 为拨号用户 提供的服务 ...

  4. JS定时跳转URL并输出剩余秒数

    1. [代码][JavaScript]代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <scrip ...

  5. 开源Asp.Net MVC网上商城BrnShop

    开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载 BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,一 ...

  6. r.js实践

    r.js合并实践 项目中用到require.js做生产时模块开发,但上线要合并压缩,幸好它配套有r.js.下面就其用法说明一下. 首先建一个目录,里面的结构如下: require.js可以到r.js项 ...

  7. SZU : A11 Sequence

    Description We are given a integer sequence, your job is find the length of the longest contiguous s ...

  8. 够快网盘支持与iOS-ASIHTTPRequest框架学习

    够快网盘支持与iOS-ASIHTTPRequest框架学习 前段时间在公司的产品中支持了够快网盘,用于云盘存储. 在这个过程中,学习到了很多新的知识,也遇到了很多问题,在此记录一下. 首先就够快的AP ...

  9. AngularJS框架研究(一)

    和几年前相比,现在的Javascript开发方式有了翻天覆地的变化,一些极具创意的开发工具的出现,让前端开发更加成熟,Angular框架就是一个例子.最近在看Angular的源代码,发现并不是件容易的 ...

  10. Left 、right join使用笔记

    用过很多次left join,right join,看到查询出的结果,知道可能是没用left join.或者right join导致的结果,但都是用一次,网上查一次使用规则,学到的东西只是皮毛.今天用 ...