js脚本实现文本文件格式批量转换
问题:
在Windows环境下,从某些软件中导出的文本格式的数据,选择了默认的ANSI格式。双击打开数据文件后,一切正常,没乱码问题。但是为什么自己的代码里,先按照ANSI格式打开,在转换为UTF8,然后解析入库,最后却发现乱码了。
解答:
代码很简单,先说一下原因。
1. 直接打开数据文件后,一切正常,没乱码问题啊?
首先,要知道ANSI肯定无法表示汉字字符集,所以直接用记事本查看时,没有发生乱码,这期间一定发生了什么。
既然ANSI无法表示汉字字符集,那么里面的汉字为什么能正常显示?这就涉及到操作系统的默认编码了,也就是代码页信息。
查看方法:
C:\>chcp
活动代码页:936
此时,936即是GBK字符集在Windows系统中的代号。另外,65001即UTF8。
所以,某些软件中的默认格式ANSI实际上是当前操作系统的“活动代码页:xxx”中xxx所代表的编码格式。你以为他是ANSI,实际上他是GBK。
注意:.Net Framework 中 System.Text.Encoding.Default 属性返回的对象,是根据活动代码页而创建相应的对象。而 .NET Core 中则始终返回 UTF8Encoding。
2. 格式转换代码
var fs = require('fs')
var path =  require('path')
var iconv = require('iconv-lite')
var ascpath = "D:/2022"
var utfpath = "D:/2022-utf"
fs.readdir(ascpath,(err,files)=>{
    if(err){
        console.log(err)
        return;
    }
   files.forEach(file=>{
       fs.createReadStream(path.join(ascpath,file))
       .pipe(iconv.decodeStream('gbk'))
       .pipe(iconv.decodeStream('utf8'))
       .pipe(fs.createWriteStream(path.join(utfpath,file)))
   })
   // 如果想加上 BOM 头 '\ufeff'
    /*
    files.forEach(file=>{
        let bytes = fs.readFileSync(path.join(ascpath,file))
        bytes = iconv.decode(bytes,'gbk') // 先用 gbk 解码
        let bom_bytes= '\ufeff' + bytes.toString('utf-8') //再用utf-8编码
        fs.writeFileSync(path.join(utfpath,file),bom_bytes)
    })
    */
})
3. 补充
问:node.js生成的csv文件用记事本打开时没有乱码,Excel中却乱码,该怎么办?明明nodejs的默认编码是utf8呀,支持中文呀?
答:写入时加入BOM头,即可解决该问题。
js脚本实现文本文件格式批量转换的更多相关文章
- shell脚本 批量转换目录下文件编码
		发布:JB01 来源:脚本学堂 [大 中 小] 分享一例shell脚本,实现可以批量转换目录下的文件编码,很实用的一个小shell,有需要的朋友参考下.原文地址:http://www.jb ... 
- 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换
		一.Qt环境设置 文件从window上传到Ubuntu后会显示乱码,原因是因为ubuntu环境设置默认是utf-8,Windows默认都是GBK.Windows环境下,Qt Creator,菜单-&g ... 
- Mac下用命令行直接批量转换文本编码到UTF8
		由于近期在Mac下写Android程序,下载的一些Demo由于编码问题源码里的汉字出现乱码,文件比较多,所以想批量解决下文件的编码问题. Mac下有以下两种方式可以解决: A. 文件名的编码:Mac的 ... 
- Excel表格文本格式的数字和数字格式如何批量转换
		Excel表格文本格式的数字和数字格式如何批量转换 在使用Excel表格对数据求和时,只能对单元格内常规格式的数据进行计算,而不能对单元格中的文本格式的数据进行计算,特点就是在单元格的左上角有一个绿色 ... 
- 使用IMAGEMAGICK的CONVERT工具批量转换图片格式
		使用IMAGEMAGICK的CONVERT工具批量转换图片格式 http://www.qiansw.com/linux-imagemagick-convert-img.html Home > 文 ... 
- jquery 、 JS 脚本参数的认识与使用
		jquery . JS 脚本参数的认识与使用 如何使用jquery刷新当前页面 下面介绍全页面刷新方法:有时候可能会用到 window.location.reload(); //刷新当前页面. par ... 
- 使用dos2unix批量转换文件
		使用dos2unix批量转换文件 dos2unix是Linux下的一个用户转换格式的程序,由于windows上文件的结束符和linux上的不同,那么在windows上编写的文件或者是脚本在Linux上 ... 
- JS脚本
		js脚本是嵌在网页里打出的一块区域,一般写在最下端 script 脚本 // 这是单行注释的一种语法 /**/ 这是多行注释的一种语法 存储内容的东西叫变量 数据类型的有: 1 整型 ... 
- 使用js进行string和json之间转换的方法
		在数据传输过种中,json是以文本,即字符串的形式传递,字符串形似Json对象: var str1 = '{ "name": "Amy", "sex& ... 
- 样式其他与JS脚本语言
		样式其他:display(显示block和隐藏none,不占位置) visibility(显示visible和隐藏hidden,占位置) overflow(超出范围 hidden隐藏) 透明(op ... 
随机推荐
- mysql8可以创建虚拟列作为公式映射字段
			普通的表 加个字段 此时再查 想改这个虚拟字段? 没门,他不能被修改.只能改那个被映射的原字段 我们看看表结构定义 好了,明白了,你就是个影分身! 
- 能不能用uni开发一个线上运动会的APP、小程序?
			引言:uni-app凭借其强大的跨平台能力,成为开发AI运动类APP和小程序的首选框架.本文旨在探讨基于uni进行开发AI运动小程序.APP开发,以及开发过程中遇到的技术难点,并为您介绍一个开箱即用的 ... 
- IT人写好简历的原则与方法
			来源: 51cto 发布时间: 2010-03-19 14:49 阅读: 3270 次 推荐: 3 原文链接 [收藏] 时常,在各大论坛看到不少的朋友在张贴简历,希望得到他人的指点. ... 
- TreeMap源码分析——深入分析(基于JDK1.6)
			TreeMap有Values.EntrySet.KeySet.PrivateEntryIterator.EntryIterator.ValueIterator.KeyIterator.Descendi ... 
- elastic8.4.0搜索+logstash<=>mysql实时同步+kibana可视化操作+netcore代码笔记
			做全文搜索,es比较好用,安装可能有点费时费力.mysql安装就不说了.主要是elastic8.4.0+kibana8.4.0+logstash-8.16.1,可视化操作及少了netcore查询代码. ... 
- Excel使用IF{1,0}虚拟数组+VLOOKUP实现联合查询
			以此案例举例: 使用IF({1,0})建立虚拟数据的方法,整体输入的公式是: =VLOOKUP(E2&F2,IF({1,0},A:A&B:B,C:C),2,0) 输入完公式之后,需要按 ... 
- 你应该了解的hooks式接口编程 - useSWR
			什么是 useSWR ? 听名字我们都知道是一个 React 的 hooks,SWR 是stale-while-revalidate的缩写, stale 的意思是陈旧的, revalidate 的意思 ... 
- 11C++循环结构-for循环(1)——教学
			一.for语句 (第27课 老狼老狼几点钟)参考1 引出问题: 当需要重复执行某一语句时,使用for语句.for语句最常用的格式为: for (循环变量赋初值:循环条件:循环变量增值) 语句: 注: ... 
- 为什么C#越来越恶心
			看看这个 再看这些 more 老子声明个空函数,没有访问数据请改为 static,真是越来越智障 为什么一个活泼的语言越搞越像 C++? C# 发明了各种可爱的小玩意儿,尤其是 async/await ... 
- 黑苹果 - 搭建python自动化测试环境
			通用环境 1. 安装 xcode 从 AppStore 安装 安装完成之后,打开 xcode,同意各种协议 不用新建项目 注意: xcode下载完成后,安装的过程很慢,需要等待.我是12.5版本,差不 ... 
