テキスト先頭の UTF8-BOM を削除する (string.strip_utf8_bom)
宣言
処理後テキスト = string.strip_utf8_bom(処理前テキスト)
引数
- 処理前テキスト
テキスト型。UTF8-BOM 文字を削除するテキスト
戻り値
- 処理後テキスト
テキスト型。UTF8-BOM 文字が削除されたテキストを返します
説明
UTF8-BOM は、文書の先頭にある三つの不可視文字
"\xEF\xBB\xBF"として表されます(Lua ソースコードの文字列では、\xに続く二桁の 16 進数で、その数値によりエンコードされた単一バイトを表します。例:\x58は文字Xを表します。印字可能文字については 「ASCII エンコード」を参照してください)
使用例
txt = "\xEF\xBB\xBFXXTouch"
sys.alert(txt..', '..#txt) -- 出力 "XXTouch, 10"
--
txt = string.strip_utf8_bom(txt)
sys.alert(txt..', '..#txt) -- 出力 "XXTouch, 7"
注:上記のコードでは、この章で扱っていない関数 sys.alert を使用しています
補足知識
Unicode 標準では UTF-8 での BOM の使用が認められていますが、UTF-8 に BOM は必要ありません。
BOM を含まない UTF-8 が標準形式です。UTF-8 ファイルに BOM を配置するのは主に Microsoft の慣習です(注:BOM 付きのリトルエンディアン UTF-16 を、詳しい説明なしに「Unicode」と呼ぶことも Microsoft の慣習です)。
BOM(byte order mark)は UTF-16 および UTF-32 用に用意されたもので、バイト順(byte order)を示します。Microsoft が UTF-8 で BOM を使用するのは、UTF-8 を ASCII などのエンコードと明確に区別できるためですが、このようなファイルは Windows 以外のオペレーティングシステムで問題を引き起こす可能性があります。詳しくは Wikipedia – Byte order markを参照してください。