关于字符串读写乱码的解决方法浅谈

 关于流模式乱码

const fs=require(‘fs‘);
var rs=fs.createReadStream(‘1.txt‘);
var str=‘‘;
rs.on(‘data‘,function(chunk){
    str+=chunk;//此处内置处理机制 str=str.toString()+chunk.toString()
    console.log(chunk)//chunk是buffer对象
})
rs.on(‘end‘,function(){
    console.log(str)//春眠不觉晓,处处闻啼鸟;夜来风雨声,花落知多少
})

var rs1=fs.createReadStream(‘1.txt‘,{highWaterMark:11});
var str1=‘‘;//设置流模式每次读取10个字节 一个汉字三个字节 发生乱码
rs1.on(‘data‘,function(chunk1){
    str1+=chunk1;
    console.log(chunk1)
})
rs1.on(‘end‘,function(){
    console.log(str1)
})
/* <Buffer a7 89 e6 99 93 ef bc 8c e5 a4>
<Buffer 84 e5 a4 84 e9 97 bb e5 95 bc>
<Buffer e9 b8 9f 3b e5 a4 9c e6 9d a5>
<Buffer e9 a3 8e e9 9b a8 e5 a3 b0 ef>
<Buffer bc 8c e8 8a b1 e8 90 bd e7 9f>
<Buffer a5 e5 a4 9a e5 b0 91 e3 80 82>
春眠不???晓,??处闻啼鸟;夜来风雨声???花落??多少。 */

 解决办法1,流模式自带设置编码格式

const fs=require(‘fs‘);
var rs=fs.createReadStream(‘1.txt‘,{highWaterMark:11});
rs.setEncoding(‘utf-8‘);
var str=‘‘;
rs.on(‘data‘,function(chunk){
    str+=chunk;//此处内置处理机制 str=str.toString()+chunk.toString()
    console.log(chunk)//chunk是buffer对象
})
rs.on(‘end‘,function(){
    console.log(str)//春眠不觉晓,处处闻啼鸟;夜来风雨声,花落知多少
})
// 春眠不
// 觉晓,处
// 处闻啼鸟
// ;夜来风
// 雨声,花
// 落知多
// 少。
// 春眠不觉晓,处处闻啼鸟;夜来风雨声,花落知多少。

解决方案2,buffer对象拼接

const fs=require(‘fs‘);
const iconv=require(‘iconv-lite‘);
var rs=fs.createReadStream(‘1.txt‘,{highWaterMark:11});
var str=‘‘;
var size=0;
var chunks=[];
rs.on(‘data‘,function(chunk){
    chunks.push(chunk);//将每次读取的buffer对象放入数组
    size+=chunk.length;//统计所有元素的个数
})
rs.on(‘end‘,function(){
   var buf=Buffer.concat(chunks,size);//合并成一个大buffer对象
   console.log(iconv.decode(buf,‘utf-8‘))//用iconv转换
})//春眠不觉晓,处处闻啼鸟;夜来风雨声,花落知多少。

解决方案3,自己拼接

const fs=require(‘fs‘);
const iconv=require(‘iconv-lite‘);
var rs=fs.createReadStream(‘1.txt‘,{highWaterMark:11});
var str=‘‘;
var size=0;
var chunks=[];
var n=0;
rs.on(‘data‘,function(chunk){
    chunks.push(chunk);//将每次读取的buffer对象放入数组
    size+=chunk.length;
})
rs.on(‘end‘,function(){
  var buf=new Buffer(size);
  chunks.forEach(function(e){
      for(let i=0;i<e.length;i++){
          buf[n]=e[i];
          n++;
      }
  })
  console.log(iconv.decode(buf,‘utf-8‘))
})//春眠不觉晓,处处闻啼鸟;夜来风雨声,花落知多少。

highWaterMark的值越大,文件读取速度越快

时间: 2024-08-01 07:15:04

关于字符串读写乱码的解决方法浅谈的相关文章

springmvc完成ajax功能以及返回字符串出现乱码的解决方法

1.加入jackson的jar包 Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象 返回字符串出现乱码的原因 原文地址:https://www.cnblogs.com/sh-0131/p/11456233.html

php上传文件中文文件名乱码的解决方法

想必很多朋友在进行utf8编码的php开发上传功能的时候,都会遇到这样的一个问题,就是上传中文文件名的文件时,文件名会变成乱码,其实我们可以用iconv函数对文件名进行重新编码就解决问题了 可能会有不少朋友碰到一些问题就是上传文件时如果是英文倒好原文名不会有问题,如果是中文可能就会出现乱码了,今天我来给大家总结一下导致乱码php上传文件中文文件名乱码的原因与解决办法吧. 这几天在windows下安装了XAMPP,准备初步学习一下php的相关内容.这几天接触到了php上传文件,但是出现了一个郁闷问

php 文件中文文件名乱码的解决方法

想必很多朋友在进行utf8编码的php开发上传功能的时候,都会遇到这样的一个问题,就是上传中文文件名的文件时,文件名会变成乱码,其实我们可以用iconv函数对文件名进行重新编码就解决问题了 php文件使用的是UTF-8编码,如果没有猜错APACHE处理用的应该是GBK.想明白了这个问题,就去查找相关的教程了,索性找到了iconv这个函数. 函数原型:string iconv ( string in_charset, string out_charset, string str )使用例子:$co

关于perl中,中文乱码的解决方法

今天在测试自己写的邮件模块的时候,发现客户端收到的邮件标题是乱码,于是学习了一下perl中对字符串处理的机制,再次记录下,也希望以后对其他朋友有所帮助 首先perl只能处理2种编码的格式,ascii码和utf-8. 那么perl首先要确定一个字符串是octets还是utf8编码,他完全是靠字符串上的utf8 flag. 在perl内部,字符串结构由两部分组成: [utf8 + 数据].如果utf8 flag是on的话, perl就会把它当成utf8字符串来处理, 如果utf8 flag为off,

C. PHP读取TXT中文乱码的解决方法

PHP读取TXT中文乱码的解决方法 2013-03-01 19:12 2203人阅读 评论(0) 收藏 举报 //$fname文件名称 if ($fname = $_FILES['nickname']['tmp_name']) { //file_get_contents() 函数把整个文件读入一个字符串中. $contents = file_get_contents($fname); //获取文件的编码方式 $encoding = mb_detect_encoding($contents, ar

zabbix2.2.3中乱码的解决方法

当将zabbix2.2.3中的语言改为中文后图形后显示如下 解决方法: 1.查看zabbix的字体文件 [[email protected] ~]# cd /usr/share/zabbix/fonts/[[email protected] fonts]# lsgraphfont.ttf 2.将windows系统中你想用的字体文件复制到linux系统中,然后再将字体文件复制到zabbix字体所在的目录中 [[email protected] ~]# cp STXIHEI.TTF /usr/sha

Sublime Text 3打开txt中文乱码的解决方法

Sublime Text是一个非常强大的编辑器,可是对中文的支持并不好,在Sublime Text 2 时,可以通过命令行的方式安装编码包来解决,但Sublime Text 3不能通过这样的方式解决 在安装完Sublime Text 3后要下载一个ConvertToUTF8包放到C:\Users\用户名\AppData\Roaming\Sublime Text 3\Packages(安装目录可能不是这个,但可以在sublime中preference - browse packages打开此目录)

Ubuntu Server 14.04 选择中文安装后日期乱码的解决方法

Ubuntu Server 14.04选择中文安装后,默认的/etc/default/locale会使某些中文日期乱码,执行ll和date可见. /etc/default/locale 原来内容为: LANG="zh_CN.UTF-8" LANGUAGE="zh_CN:zh" LC_NUMERIC="zh_CN" LC_TIME="zh_CN" LC_MONETARY="zh_CN" LC_PAPER=&q

string.Format出现异常&quot;输入的字符串格式有误&quot;的解决方法

string.Format出现异常"输入的字符串格式有误"的解决方法 今天在做项目时,碰到一个很奇怪的问题,我使用string.Format居然报“输入的字符串格式有误”的错误,我调了很久,还是不对,不明白错 在哪里,后来还是google了一下,原来我在字符串中出现了"{"字符.而"{"字符若出现在string.Format中是必需转义的,也就是要用两 个"{{"代表一个"{",同时双下面把我查找到的解决方