Hi Tao Wang, My test.cpp source is UTF-8 with BOM. If I compile it like this... g++ -x c++ <(xxd -g 1 -s 3 test.cpp | xxd -g 1 -s -3 -r) -o a.out ... that strips out the first three bytes at the beginning. For test.cpp, this happens to be the BOM (ef bb bf) at the beginning. You'd may want to create a little 'stripBOM' program that behaves like 'cat', but gobbles the BOM if present. Or you could use awk, sed, perl, or your favorite-text-munging-tool-of-choice to perform the same conversion. I just used xxd because it was quick, for illustrative purposes. (There's probably a more suitable unix tool than xxd for this kind of cat-with-offset, but you'd want something that filters out BOM rather than always offsetting.) HTH, --Ejlay