这是因为
我有一个服务器,它可以替换文件中的一些字符串。它看起来像这样:
var stringToBeReplacedWith = "Cool text";
var data = fs.readFileSync(file, 'utf-8');
var RegExp = new RegExp("Stringtobereplaced", 'g'); // global search
data = fileContents.replace(RegExp, stringToBeReplacedWith);
fs.writeFileSync(file, data);
代码通过Mime类型/编码更改来工作。
如何确保在替换字符串时保留Mime类型?我注意到有很多库可以阅读mimetype,但(到目前为止)我还没有找到一个相反的库。
.class
文件是二进制的。您正在以UTF-8字符串的形式读取该文件。因此,当你把它写回来时,它就是把它写成一个格式错误的UTF-8字符串(因此幻数发生了变化)。
只要你不想替换多字节字符,你就可以更改
var data = fs.readFileSync(file, 'utf-8');
至
var data = fs.readFileSync(file, 'binary');
和
fs.writeFileSync(file, data);
至
fs.writeFileSync(file, data, { encoding: 'binary' });
或
fs.writeFileSync(file, new Buffer(data, 'binary'));
它应该如你所期望的那样工作。