今天才發現的大坑,大概是我玩Java太少了。

有個函數:

BufferedReader reader = new BufferedReader(new FileReader(stopWords));
String line = reader.readLine();
 while (line != null)
{
    STOP_WORDS.add(Pattern.compile(line, Pattern.CASE_INSENSITIVE));
    line = reader.readLine();
}
reader.close();

在IntelliJ IDEA測試環境下完全沒問題,可以順利載入所有文本。
但到了生產環境發現只有ASCII字符有效。

一開始還以為是UTF-8 BOM的問題,改成帶BOM的存了一次,還是不行。

後來才發現,原來FileReader並不會強制默認編碼到UTF-8。Java 11倒是可以手動設置new FileReader(fileName, StandardCharsets.UTF_8),但Java 8就無緣了。
無奈,只好轉用Files.newBufferedReader,這個函數在Java 8默認使用UTF-8,但Java 7裡還是需要手動設置的。

所以最後改成了:

BufferedReader reader = new BufferedReader(Files.newBufferedReader(Paths.get(path)));

運行……發現其他行都正常了,但首行還是不行。想到了之前添加的BOM……
好嘛,到頭來還得把BOM刪回去……
行吧。
EOF

最后修改:2021 年 05 月 28 日 02 : 06 AM