1.首先记录下php关于字符串长度的统计

<?php
echo strlen('0123456789');//
echo '<br>';
echo strlen('一二三四五六七八九十');//
echo '<br>';
echo mb_strlen('一二三四五六七八九十','utf-8');//

2.Buffer对象为16进制的两位数,即FF 0-225;

var str='王炜';
var buf=new Buffer(str,'utf-8');
console.log(buf);//<Buffer e7 8e 8b e7 82 9c>
var str='hello,王炜';
var buf=new Buffer(str,'utf-8');
console.log(buf);//<Buffer 68 65 6c 6c 6f 2c e7 8e 8b e7 82 9c>

可以看出中文utf-8占3个元素,字母和半角符号均占1个元素


3.BUffer可以调用length方法,获取长度,也可以下标获取,每个元素都是0-225之间的随机数

var buf=new Buffer(10);//生成长度为10的buffer
buf[1]=22.23;
console.log(buf[1]);//22 如果是小数或舍弃小数部分
var buf=new Buffer(10);//生成长度为10的buffer
console.log(buf.length);//
console.log(buf[8])//0 默认都是0
buf[1]=257;
console.log(buf[1])//0 大于等于256会在原数基础上减256
buf[2]=-1;
console.log(buf[2])//如果小于0 会在原数基础上加256

4. Buffer()对象以8kb来界定一个对象是大对象还是小对象

5.BUffer()目前支持的字符串转换 ASCII UTF-8 UTF-16LE/UCS-2 Base64 Binary Hex

new Buffer(str,[encoding]) 默认为UTF-8

buf.write(string,[offset],[length],[encoding])每一个单元可以写入指定的编码 

buf.toString([encoding],[start],[end])将buffer转换为指定的类型 可以设置转换范围

var buf=new Buffer(10);//生成长度为10的buffer
buf.write('王炜','utf-8');
console.log(buf)//<Buffer e7 8e 8b e7 82 9c 00 00 00 00> 汉字以utf-8写入buf
console.log(buf.toString('hex'))//e78e8be7829c00000000 buf以'hex'格式转为字符串
var buf1=new Buffer(10);
//字符串以'hex'写入buf1再以utf-8转为字符串
buf1.write(buf.toString('hex'),'hex')
console.log(buf1.toString('utf-8'));//王炜

 6.Buffer.isEncoding(encoding)判断buffer是否支持该字符编码

 当然,不支持的可以采用iconv(c++写的)和iconv-lite(采用js编写,性能好一点)模块转换

console.log(Buffer.isEncoding('utf-8'))//true
console.log(Buffer.isEncoding('hex'))//true
console.log(Buffer.isEncoding('GBK'))//false

关于iconv-lite

const iconv=require('iconv-lite');
var buf=new Buffer('我是王炜','utf-8');
var str=iconv.decode(buf,'GBK');//buffer转换为gbk
console.log(str)//鎴戞槸鐜嬬倻
var str1=iconv.decode(buf,'utf-8');//buffer转换为utf-8
console.log(str1)//我是王炜 var buf2=iconv.encode(str1,'utf-8');//utf-8转buffer
console.log(buf2);//<Buffer e6 88 91 e6 98 af e7 8e 8b e7 82 9c>
console.log(buf2.toString())//我是王炜

最新文章

  1. C# 中的virtural和abstract
  2. 备忘zookeeper(单机+伪集群+集群)
  3. C++ 多态的实现原理与内存模型
  4. crsctl stat res -t 和 crsctl stat res -init -t
  5. sbt设置
  6. ANTLR4权威参考手册
  7. directUI
  8. 2015 UESTC Winter Training #6【Regionals 2010 &gt;&gt; North America - Rocky Mountain】
  9. 安装ConEmu
  10. linux下getrusage()
  11. DistBlockNet:A Distributed Blockchains-Based Secure SDN Architecture for IOT Network
  12. java自定义连接池
  13. 2017.2.6Redis连接问题排查
  14. php 固定红包 + 随机红包算法
  15. 在caffe中执行脚本文件时 报错:-bash: ./train.sh: Permission denied
  16. What is event bubbling and capturing?
  17. pointer-events
  18. t default] Failed to discover available identity versions when contacting http://ahswj-cloud-controller:35357. Attempting to parse version from URL.: ConnectFailure
  19. mybatis 在存储Integer、bigdecimal等java数据类型时,将0存成null
  20. 【Alpha】Task分配与计划发布

热门文章

  1. [JSOI2007]字符加密Cipher
  2. linux shell 获取当前日期/时间
  3. 关于mysql 5.7版本“报[Err] 1093 - You can&#39;t specify target table &#39;XXX&#39; for update in FROM clause”错误的bug
  4. RabbitMQ问题解决:TCP connection succeeded but Erlang distribution failed
  5. spring框架学习(八)spring管理事务方式之注解配置
  6. IFrame跨域处理方法-Javascript
  7. 【leetcode 简单】 第七十题 有效的字母异位词
  8. Linux日志文件/var/log详解
  9. v4l2API无法执行VIDIOC_DQBUF的问题
  10. MODULE_DEVICE_TABLE (二)【转】