這裏就是我的了:呼叫的iconv 1.8.7通過系統將文件從UTF-16轉換爲UTF-8
path_js = 'path/to/a/js/file.js'
path_new_js = 'path/where/the/converted/file/should/go.js'
puts('iconv -f utf-16le -t utf-8 ' + path_js + ' > ' + path_new_js)
system('iconv -f utf-16le -t utf-8 ' + path_js + ' > ' + path_new_js)
賣出期權聲明的輸出是:
iconv -f utf-16le -t utf-8 path/to/1-1-2_E1_MC105.js > compiled/path/to/1-1-2_E1_MC105.js
如果我在終端中複製粘貼完全相同的行,則轉換將成功進行,但當它在我的ruby腳本中運行時,將使用與原始文件(本例中爲utf-16)相同的編碼創建新文件。關於什麼是缺失/錯誤的任何想法?
乾杯!
更新:我在Mac OS X雪豹,我試着使用紅寶石1.8.7(系統默認)和1.9.2(安裝使用RVM)相同的腳本。我也試過如下:
f = File.open(path_js,'rb')
js = f.read
f.close
new_js = Iconv.conv('utf-8', 'utf-16', js)
File.open(path_new_js,'w'){|f| f.write(new_js)}
有了相同的結果:S
你確定你應該說UTF-16LE嗎?這意味着文件中沒有BOM。如果搞砸了,輸出文件將與輸入文件有不同的數據。我敢打賭你應該使用UTF-16而不是UTF-16LE。幾乎從不指定LE或BE。 – tchrist
如果我使用UTF-16而不是UTF-16LE,結果是一樣的。 –
您應該使用UTF-16比UTF-16LE多獲得兩個字節:BOM是第一個,而不是第二個。 – tchrist