在安裝jsdom模塊的過程當中遇到這麼一個MSB4025錯誤:(win8.1 下,已經安裝了vs2013 for desktop express版) node
error MSB4025: 未能加載項目文件,給定編碼中的字符無效
在網上查了一些資料,說是由於編碼的問題,由於在windows下使用,用戶名是中文,致使在生成vcxproj文件時,有些依賴路徑裏包含了中文字符。好吧,我認可我安裝模塊的路徑的確是包含中文名稱...... python
windows下的中文默認用的是GBK編碼,而vcxproj文件默認的編碼方式是utf-8。node的gyp工具,並無很好的處理多語言編碼的問題。這樣致使生成的vcxproj文件是ANSI編碼,內部的中文字符是GBK編碼,等到調用VS 2013編譯模塊時,就會致使VS2013沒法正確使用vcxproj文件,致使編譯安裝失敗。 express
nodejs的gyp工具使用的python,在安裝目錄下能夠找到gyp相關的python代碼,修改其中用於生成vcxproj的代碼,使其用utf-8編碼生成文件內容並存儲,便可解決此問題。
網上找到資料說是修改 C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp>下的 easy_xml.py文件(這裏的 ‘C:\Program Files (x86)\nodejs’指的是本人nodejs的安裝路徑,實際操做中要換成對應的路徑,通常是‘C:\Program Files\nodejs‘) npm
找到 「# It has changed, write it」這一行,將下面的判斷代碼修改,原來是: windows
# It has changed, write it if existing != xml_string: f = open(path, 'w' ,'utf_8_sig') f.write(xml_string) f.close()
# It has changed, write it if existing != xml_string: if path.endswith('vcxproj'): #use utf_8 encoding to generate vcxproj file f = codecs.open(path, 'w', 'utf_8_sig') #convert GBK string to Unicode string to ensure the later utf_8 encoding f.write(xml_string.decode('gbk')) else: f = open(path, 'w') f.write(xml_string) f.close()
import codecs
完成後保存,在運行一下安裝jsdom的命令,發現已成功安裝。 dom