之前的版本是个意思意思,验证商店发布的(其实是我以前自己用的工具),这次把格式检查和转换都做上了,功能应该差不多了,还有一些需要小改进的地方。
因为还没什么用户嘛,还是保持全功能免费试用。(真的是为了交个朋友)
目录
一、从Microsoft Store安装
二、从github获取源码
三、运行
四、新增功能
4.1 预览和编码选择
4.2 输出格式选择
4.3 编码保存
五、关于文本格式的知识
5.1 行结束符
5.2 字符编码
5.3 字符格式
5.4 BOM
5.5 代码页
一、从Microsoft Store安装
Microsoft Store下载链接:ctDos2Unix - Download and install on Windows | Microsoft Store
打开此网页,从这里进入商店,可以免费安装试用版(网页里可能不会显示“免费试用”),试用版没有期限并且和正式版没有区别(不理解是吧,这是我用来做应用上架练习的。)
二、从github获取源码
codetoys/Dos2Unix: txt tools ,Encoding conversion
https://github.com/codetoys/Dos2Unix
当然,此源码不包含用来打包MSIX的项目,仅包含程序本身的源码。
简单程序,只有一个exe文件,依赖.net framework 4.8,应该不用额外安装。
程序仅保存一个属性,具体保存在哪里你要看Properties.Settings.Default.Save()怎么回事了(一般在AppData的Local下面)。
用visual studio 2022打开sln文件即可。
三、运行
安装后会有个开始菜单项(Microsoft Store的标准行为),直接编译源代码就是直接运行就行了。
试用版和正式版唯一的区别是标题栏上显示的是“试用版”。
四、新增功能
4.1 预览和编码选择
界面分三部分:列表显示区、预览区、按钮区。
点击按钮“浏览”选择一个目录,会把目录里的所有文件都显示在左边列表中,列表的选中项在中间的预览区自动显示预览。
默认根据检测到的编码显示,如果有乱码(有些编码无法自动检测),可以手动指定编码。
也可以显示二进制。二进制显示尽量根据检测到的编码来处理回车换行,要注意回车和换行都会导致换行显示,这一点与文本显示方式不同。
4.2 输出格式选择
可以选择DOS/UNIX/MAC行尾格式,可以选择添加BOM或删除BOM,这两个选项都可以选择“保持原样”,不做改变。
4.3 编码保存
使用指定的编码直接保存。注意这个功能现在是没有自动备份的,我下个版本加上。
五、关于文本格式的知识
5.1 行结束符
DOS(Windows)在内存中使用一个“\n”表示换行,存储到文件则为“\r\n”。UNIX(Linux)则为“\n”,Mac(苹果电脑)却是“\r”,真是想不通。
因为这种区别,ftp工具一般都有指定那些文件后缀名是文本文件的设置,以此来自动识别文件文件,供传输时做格式转换。当然ftp工具也有强制使用二进制或文本模式的功能。
一般我们自己写程序读文件这几种行结束符都兼容,因为多了判断,效率稍低。
而系统提供的行读取函数则不兼容不同的行结束符,因此可能会导致错误。
像我们程序员经常在网上复制粘贴代码的,文件里行结束符不一致的情况也很多,这都可能出问题。
所以批量检测、转换文件格式是很重要的。
5.2 字符编码
字符编码最初是面向硬件的啊!一个编码输出给一个硬件,硬件就显示一个字符给你看,所以一种编码其实是对统一标准的硬件的。后来ASCII码成了英文字符的主流。最初没有中文啊。
后来就有了中文显示了,因为ASCII只用了每个字节的低七位,最高位总是0,所以中文等语言选择使用最高位为1来编码,用连续两个字节表达一个本地字符。这样就兼容ASCII码,纯ASCII文件可以正常显示,含有本地编码字符的文件在纯英文系统上会乱码。
这种本地编码大家都选择了类似的方式,虽然方便但是本地编码之间互相交流成了问题。因为编码规则一样嘛,但是同一个本地编码(两个高位为1的字节)含义完全不相干,显示为乱码的时候你只能瞎猜,一个一个试过去,凑巧对了就不乱码了(但是你不认识的语言也容易猜测是不是对了)。
中文分为国标和大五两个系列,GB后面数字大的是较新的版本,兼容数字小的。GB2312已经过时了,但是大家还是习惯叫这个。
本地编码非常不利于国际交流嘛,所以大家坐到一起商量了一下,搞了个大一统的UNICODE,宇宙字符集。宇宙字符集把所有现有字符都纳入了,而且可以无限扩充。
5.3 字符格式
在unicode出现以前,字符都是单字节,本地编码用两个连续字符表示一个字符(所以支持的字符数是有限的),计算字符数(不是字节数)需要一个字节一个字节判断,比较麻烦。
unicode出现以后情况有所不同,因为大部分UNICODE字符两字节就可以表达,于是就想啊,用unsigned short int来表达字符会不会简单啊,这样基本上一个unsigned short int就是一个字符,计算比较简单(虽然不是绝对,但应付大部分情形是没问题的),这个就是UTF-16,windows内核表达方法。
unicode其实有多种字符格式。
utf-7只用每个字节的低七位,要连续多个字节来表达一个字符,这种格式现在很少见到了。
utf-8与本地编码类似,兼容ASCII,但是又容易和本地编码混。不过utf-8每个字节前几位是有规定的,指示了字符包含几个字节,这样比较容易检测(本地编码除了最高位为1没有别的标志)。
utf-32用unsigned int来表达字符,基本上现有的字符都是一个unsigned int,太完美了。但是要多用很多字节啊。
5.4 BOM
BOM就是文件最前面用来指示格式的特殊标记。
为什么要有这个呢?因为对于utf-16和utf-32,使用short 和int来表示字符,同一个short或int在不同字节顺序的机器上是不一样的,所以需要有一个标记来指示。
因为这个东西没有统一规范,windows有,unix没有,混乱就这样形成了。
windows还给utf-8也弄了一个BOM。凭良心说呢,大家都有BOM的话,确实减少很多混乱。但是没法子,现实无比混乱啊。
5.5 代码页
代码页就是上面说的字符编码和字符格式的组合(各种本地编码和不同格式的unicode),但是不包含是否包含BOM(也就是说windows上默认都是带的)。
(这里是文档结束)