The default setting "UTF8"
/"UTF-8"
results in a text file without a byte order mark (BOM)/signature. What if I need a text file in UTF-8 with BOM, and don't want to use a third-party tool to modify the encoding?
1 Answer
$\begingroup$
$\endgroup$
I tried for a while, but I failed to find a built-in option to achieve this. (It's a bit strange to me, because the Import
function clearly knows how to handle text file in UTF-8 with BOM.) So I decided to code my own.
As mentioned in e.g. this post:
A BOM-ed UTF-8 string will start with the three following bytes.
EF BB BF
So we just need to add these three bytes and export:
exportUTF8BOM[dir_, text_] :=
With[{bw = BinaryWrite[dir, #] &},
bw@{16^^ef, 16^^bb, 16^^bf};
bw@ToCharacterCode[text, "UTF8"];
Close@dir]
Test:
exportUTF8BOM["tst.txt", "太阳当空照,花儿对我笑"] // SystemOpen