当前位置: 首页 > news >正文

一个批量文件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上默认都是带的)。


(这里是文档结束)

http://www.xdnf.cn/news/489763.html

相关文章:

  • 淘宝扭蛋机系统开发前景分析:解锁电商娱乐化新蓝海
  • HOW - React NextJS 的同构机制
  • Dify中使用插件LocalAI配置模型供应商报错
  • Spring Cloud深度实践:从服务发现到弹性智能API网关全景解析
  • Day29 -JS开发02 -两个实例:dom树(存在dom-xss) 加密及基础的js逆向(明文加密)
  • SAP-ABAP:SAP DMS(文档管理系统)的详细说明,涵盖其核心功能、架构、配置及实际应用
  • spring学习->sprintboot
  • Room数据库
  • Matrix-Game:键鼠实时控制、实时生成的游戏生成模型(论文代码详细解读)
  • Java并发编程-线程池(四)
  • Reth(冗余以太网接口) 和Bridge-Aggregation(链路聚合接口)区别
  • 一个进程中可以有多个 WebView2 控件,它们各自有独立的用户数据目录,COOKIE共享
  • 内存泄漏系列专题分析之十六:高通相机CamX内存泄漏内存占用分析--chi-cdk部分ION内存拆解方法
  • 跳转传参的使用
  • Java生产环境设限参数教学
  • 第六章 进阶10 实习生的焦虑
  • 一文讲透面向对象编程OOP特点及应用场景
  • 深入探索Java微服务架构:Spring Cloud与Kubernetes的整合实践
  • 敏感数据加密和模糊匹配
  • 使用CherryStudio +SiliconFlow 部署独立的deepseek+知识库
  • 文本数据词汇级增强
  • Python 之类型注解
  • MCU开发学习记录16* - 看门狗学习与实践(HAL库) - IWDG与WWDG -STM32CubeMX
  • java加强 -IO流
  • 基于React的高德地图api教程005:圆形标记的绘制、删除、修改
  • 【AI学习】AI大模型技术发展研究月报的生成提示词
  • 【Linux】序列化与反序列化、会话与进程组、守护进程
  • 投影仪基础知识及选购方向小记③
  • 曝光融合(Exposure Fusion)
  • 【大模型系列篇】驱动编码助手Cursor与Windsurf工作的隐藏算法解读