メインコンテンツまでスキップ

テキスト先頭の 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を参照してください。