问题:

在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脚本实现文本文件格式批量转换的更多相关文章

  1. shell脚本 批量转换目录下文件编码

    发布:JB01   来源:脚本学堂     [大 中 小] 分享一例shell脚本,实现可以批量转换目录下的文件编码,很实用的一个小shell,有需要的朋友参考下.原文地址:http://www.jb ...

  2. 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换

    一.Qt环境设置 文件从window上传到Ubuntu后会显示乱码,原因是因为ubuntu环境设置默认是utf-8,Windows默认都是GBK.Windows环境下,Qt Creator,菜单-&g ...

  3. Mac下用命令行直接批量转换文本编码到UTF8

    由于近期在Mac下写Android程序,下载的一些Demo由于编码问题源码里的汉字出现乱码,文件比较多,所以想批量解决下文件的编码问题. Mac下有以下两种方式可以解决: A. 文件名的编码:Mac的 ...

  4. Excel表格文本格式的数字和数字格式如何批量转换

    Excel表格文本格式的数字和数字格式如何批量转换 在使用Excel表格对数据求和时,只能对单元格内常规格式的数据进行计算,而不能对单元格中的文本格式的数据进行计算,特点就是在单元格的左上角有一个绿色 ...

  5. 使用IMAGEMAGICK的CONVERT工具批量转换图片格式

    使用IMAGEMAGICK的CONVERT工具批量转换图片格式 http://www.qiansw.com/linux-imagemagick-convert-img.html Home > 文 ...

  6. jquery 、 JS 脚本参数的认识与使用

    jquery . JS 脚本参数的认识与使用 如何使用jquery刷新当前页面 下面介绍全页面刷新方法:有时候可能会用到 window.location.reload(); //刷新当前页面. par ...

  7. 使用dos2unix批量转换文件

    使用dos2unix批量转换文件 dos2unix是Linux下的一个用户转换格式的程序,由于windows上文件的结束符和linux上的不同,那么在windows上编写的文件或者是脚本在Linux上 ...

  8. JS脚本

    js脚本是嵌在网页里打出的一块区域,一般写在最下端 script   脚本 //      这是单行注释的一种语法 /**/  这是多行注释的一种语法 存储内容的东西叫变量 数据类型的有: 1  整型 ...

  9. 使用js进行string和json之间转换的方法

    在数据传输过种中,json是以文本,即字符串的形式传递,字符串形似Json对象: var str1 = '{ "name": "Amy", "sex& ...

  10. 样式其他与JS脚本语言

    样式其他:display(显示block和隐藏none,不占位置)  visibility(显示visible和隐藏hidden,占位置)  overflow(超出范围 hidden隐藏) 透明(op ...

随机推荐

  1. java根据时区转换获取时间的方法

    方法一: public static void main(String[] args) { // 假设这是从MySQL获取的UTC时间字符串 String utcTimeStr = "202 ...

  2. 鸿蒙NEXT开发案例:计数器

    [引言](完整代码在最后面) 本文将通过一个简单的计数器应用案例,介绍如何利用鸿蒙NEXT的特性开发高效.美观的应用程序.我们将涵盖计数器的基本功能实现.用户界面设计.数据持久化及动画效果的添加. [ ...

  3. element 动态合并表格---进阶版

    错误展示 正确展示 如果使用上次博客写的element 动态合并表格那么会出现上述图片情况,所以对其进行完善实现下图(正确展示)情况 处理函数 mergeTableRow(data, merge) { ...

  4. ubuntu系统安装wps后语言是英文的问题

    如果安装ubuntu系统后,在里面安装wps的时候,发现都是英文,无法切换为中文,可以这样操作. 此时点击这里新建一个word空白文档 点击这里新建文档 点击这里显示语言 点击下面的 简体中文 再点击 ...

  5. Linux下二维码识别库Zbar的安装与使用

    1. 安装Zbar sudo apt-get install libzbar-dev 2. 识别流程 读取图像并转换为Zbar内建图像类型 创建Zbar扫描器 设置扫描参数 扫描图像并获取结果 #in ...

  6. 《花100块做个摸鱼小网站! 》第十篇—响应式布局适配PC端和移动端

    ️基础链接导航️ 服务器 → ️ 阿里云活动地址 看样例 → 摸鱼小网站地址 学代码 → 源码库地址 一.前言 大家好呀,我是summo,小网站一直有个问题,就是PC端的样式和移动端的样式是两套,并且 ...

  7. linux bash shell 中的单引号和双引号

    摘抄自:ABS_CN 当要引用一个变量的值时,一般推荐使用双引号.使用双引号除了变量名[2]前缀($).后引符(`)和转义符(\)外,会使shell不再解释引号中其它所有的特殊字符.[3] 用双引号时 ...

  8. Mac下的终端高亮显示

    默认安装之后Mac下的终端都是一色的黑白,所以需要做一番改造 推荐安装Linux使用的GNU Coreutils替换Mac的ls命令,因为: Coreutils提供了配置工具,定义颜色代码更加方便: ...

  9. 使用联邦学习法训练强化学习算法以实现对抗攻击性:读论文——小型微型计算机系统(中文CCF B)《面向深度强化学习的鲁棒性增强方法》

    论文地址: http://xwxt.sict.ac.cn/CN/Y2024/V45/I7/1552 PS: 这个学习率有些奇怪,用数据量占一次优化的总数据量的大小作为学习率,这或许也是真的有独创性的操 ...

  10. WinForm(C/S)项目中使用矢量字体(FontAwsome、Elegant)图标

    1.介绍 字体图标在Web应用中最为常见,字体图标是矢量的,矢量图意味着每个图标都能在所有大小的屏幕上完美呈现,可以随时更改大小和颜色,而且不失真.字体图标常见的有Font Awesome和Elega ...