2015-02-05 47 views
0

我有服務器替換文件中的某些字符串。它看起來像這樣:在NodeJs中編寫Java.class文件(保留幻數)

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,但是(迄今爲止)我還沒有找到相反的庫。

回答

2

這是因爲.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')); 

和你希望它應該工作。

+0

我在寫入文件時出現:「錯誤:未知編碼」。我發現有些方法可以使用庫對文件進行「編碼」(http://stackoverflow.com/questions/14551608/cant-find-encodings-for-node-js),但是這需要編碼?你可能知道使用什麼編碼? – Mdlc 2015-02-05 19:37:56

+0

你使用什麼版本的節點?你也可以嘗試另外使用我現在包含在我的答案中的'fs.writeFileSync'。 – mscdex 2015-02-05 20:09:05

+0

只是使用'二進制'而不是{編碼:'二進制'}爲我修復>代碼執行。但是在編譯代碼時,我得到以下錯誤:「未知標記字節:6f」(而不是3f對於某些文件也是54和3f)。任何想法,爲什麼這可能是?附:我在節點10上 – Mdlc 2015-02-05 20:24:59