一个批量文件Dos2Unix程序(Microsoft Store,开源)1.1.0 编码检测和预览

        之前的版本是个意思意思,验证商店发布的(其实是我以前自己用的工具),这次把格式检查和转换都做上了,功能应该差不多了,还有一些需要小改进的地方。

        因为还没什么用户嘛,还是保持全功能免费试用。(真的是为了交个朋友)

目录

一、从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上默认都是带的)。


(这里是文档结束)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初级代码游戏

知识究竟是有价还是无价

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值