就象Buffer那种效果,
str='中文ABCD1234。。。' // 文件用gb2313保存
var buf=new Buffer(str);
console.log(buf);
<Buffer d6 d0 ce c4 41 42 43 31 32 33 34 35> 但是buffer只会打印一部分,多余的不显示
试了一下encodeURIComponent / String.charCodeAt 这个是按char是按多字节算1个 比如 “中文ABCD1234” 的长度是10
encodeURIComponent只有在文件编码是utf8 的时候结果是一致的 如果数据是 gbk编码就 跟buffer输出结果不一样
buf.toString(“hex”)
@zbinlin ---------- Capture Output ----------
这样跟 encodeURIComponent 结果是一样的 efbfbdefbfbdefbfbdefbfbd4142434431323334efbfbdefbfbdefbfbdefbfbdefbfbdefbfbd
这个问题我回答过一次。仔细看文档,Buffer有个参数可以控制检视长度。
const buffer = require('buffer')
buffer.INSPECT_MAX_BYTES = 10000
let buf = Buffer.from('asldfjalsdfjlasdjflkasjdflasdflkjaslkdfjkalsdjfklasdjflkasdjfa')
console.log(buf)
@liujavamail 除了buffer buffer.INSPECT_MAX_BYTES = 10000 这种 还有其他方法吗?
@yakczh 你代码是怎么写的?
var crypto=require('crypto');
var fs=require('fs');
var arr=[0x0,0x0,0x4d,0x67,0x0,0x0,0xa,0x28,0x5a,0x73,0xde,0x69,0x57,0xdc,0x4a,0x85];
const srcdata = new Buffer(arr, 'binary');
var md5= crypto.createHash('md5').update(srcdata).digest('hex');
console.log(md5)
fs.writeFileSync('md5',srcdata, 'binary');
var data=fs.readFileSync('md5', 'binary');
md5= crypto.createHash('md5').update(data).digest('hex');
console.log(md5)
这个arr是模拟的,实际上是从网络传送过来的
你这里有问题:
fs.writeFileSync('md5',srcdata, 'binary');
// data 是一个字符串
var data=fs.readFileSync('md5', 'binary');
// 这里调用 update 时,由于 data 是字符串,而 update 需要的是一个 Buffer(上面那个 update 的参数是 Buffer 了,就无需进行转换)
// 因此这里需要将字符串自动转换成 Buffer,而由于这里没有指定编码,这此默认使用 utf8 编码。
// 所有这里使用 utf8 编码转换,会导致与上面 ary 转成的 Buffer 不一样了。
// 这里,你可以在 update 里指定编码,或上面 readFileSync 时去掉编码。
md5= crypto.createHash('md5').update(data).digest('hex');
console.log(md5)