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 ...
随机推荐
- 合宙低功耗4G模组HTTP网络协议应用
一.HTTP概述 1.1 简介 HTTP是HyperTextTransferProtocol(超文本传输协议)的缩写.HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型.HT ...
- 多校A层冲刺NOIP2024模拟赛09
多校A层冲刺NOIP2024模拟赛09 考试唐完了,T2.T4 都挂了 100 分,人麻了. 排列最小生成树 给定一个 \(1, 2,\dots , n\) 的排列 \(p_1, p_2,\dots, ...
- golang之类型转换cast
Go 语言作为强类型语言,在使用 Golang 开发项目时,经常会遇到类型转换的场景,整型之间可以直接转换,字节切片和字符串之间也可以直接转换. 但是,如果整型和字符串之间做类型转换,则需要使用 st ...
- Linux之EOF
常见问题: 1.在EOF中存在特殊字符,例如$ 导致后面的无法识别, 因为默认会对变量自动替换 使用引号处理 cat >> a.sh << "EOF" ec ...
- 试了下Cursor,感觉程序员工种危险了
大家好,我是汤师爷~ 今年8月份,AI 编程工具 Cursor 在开发者社区彻底火了.在 Twitter 平台上,Cloudflare 副总裁分享了一段视频,展示了一个令人震惊的案例.他年仅 8 岁的 ...
- 张高兴的 Raspberry Pi AI 开发指南:(二)使用 Python 进行目标检测
目录 Python 环境配置 实现 USB 摄像头的目标检测 参考 在上一篇博客中,探讨了使用 rpicam-apps 通过 JSON 文件配置并运行目标检测示例程序.虽然这种方法可以实现有效的检测, ...
- uni-app小程序(快手、抖音)getCurrentPages使用坑位记录
前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验也挺棒的,公司项目就是主推uni-app. 坑位 最近在做一个 ...
- LINUX通过STTY命令操作串口设备(LINUX串口操作命令)
stty(settty,设置tty)命令用于检查和修改当前注册的终端的通信参数 1.显示某个串口参数信息:stty -F /dev/ttySTM6 -a 2.设置某个串口参数信息: ...
- Flutter Stream的使用
Flutter Stream的使用 首先,来了解一下stream是什么 异步数据事件的来源. 流提供了一种接收一系列事件的方法.每个事件要么是一个数据事件,也称为流的元素,要么是一个错误 事件,即某事 ...
- PDFSharp - Graphics 绘制接口
PDFSharp - Graphics Graphics - PDFsharp and MigraDoc Wiki 所有的 Graphics 类型都设计成模仿来自 System.Drawing 命名空 ...