Open1

CMakeのfile(STRINGS ...)はENCODINGを明示しないと日本語が読めない

okuokuokuoku

無駄にハマってしまった。。

file(STRINGS ja.txt lines ENCODING UTF-8)

foreach(l ${lines})
    message(STATUS "${l}")
endforeach()

のようにしないと、

1234 日本語の
5678 文字列

を読めない。

file(STRINGS ja.txt lines)

foreach(l ${lines})
    message(STATUS "${l}")
endforeach()

のように、 ENCODING を消すと、

-- 1234
-- 5678

となり、ASCIIでない部分が無視される。

ファイルにBOMが有る場合はBOMが尊重されるが、通常のシチュエーションではBOMなんか付いてないケースの方が多いのではないか(Windows以外)。