使用 Ant 或 Gradle 合併多個檔案時,因為檔案內含中文字導致編碼問題。
問題
我有一支合併檔案的 task 如下:
將 data 下的 SQL 檔合併成 output 內的 result.sql1 2 3 4 5 6 7 8 9 10 11
| task concatsql(type: SourceTask) { delete 'output/result.sql' source 'data' include '*.sql' outputs.file new File("output", "result.sql") doLast { ant.concat(destfile: outputs.files.singleFile) { source.addToAntBuilder(ant, 'fileset', FileCollection.AntType.FileSet) } } }
|
因為 SQL 檔內容包含中文字,導致輸出的內容會有亂碼,而這支 Gradle,其實底層是使用 Ant 的 cancat 功能,所以同理,使用 Ant 去跑也會出現一樣的問題。
基礎知識
好像也沒什麼基礎知識,就是 encoding 的問題。
Ant 可以加入 encoding
跟outputencoding
屬性,請參考How to encode Java files in UTF-8 using Apache Ant?。
解決方法
首先將原始檔案儲存為 UTF-8
編碼,並在呼叫 ant.concat
時,加入 encoding
和outputencoding
設定。
1 2 3 4 5 6 7 8 9 10 11 12
| task concatsql(type: SourceTask) { delete 'output/result.sql' source 'data' include '*.sql' outputs.file new File("output", "result.sql") doLast { ant.concat(destfile: outputs.files.singleFile, encoding:"UTF-8", outputencoding: "UTF-8") { source.addToAntBuilder(ant, 'fileset', FileCollection.AntType.FileSet) } } }
|