ファイル BOM 情報確認
2021/05/18 06:06
ファイルの BOM 情報確認マクロ
このサンプルマクロは、以下の仕様を満たすものとします。マクロの目的
対象ファイルの BOM (Byte Order mark) を確認します。出力されるダイアログボックスの数値の意味は、以下の通りです。
<result>の値 | 値の意味 |
---|---|
-1 | 対象 BOM は UTF-8 のはずだが情報が不正。 |
0 | 対象に BOM はなかった。 |
1 | 対象 BOM は UTF-8 を示している。 |
2 | 対象 BOM は UTF-16 Big Endian を示している。 |
3 | 対象 BOM は UTF-16 Little Endian を示している。 |
利用可能環境
Teraterm
依存する Tera Term バージョン:Tera Term 4.69 以降*1利用する Tera Term コマンド:
種別:制御 | Ver | 機能の簡易説明 |
---|---|---|
call | サブルーチンをコールする。 | |
end | マクロの実行そのものを終了する。 | |
if,then,elseif,else,endif | 条件分岐 | |
return | サブルーチンを抜け、メインルーチンへ戻る。 | |
種別:文字列操作 | Ver | 機能の簡易説明 |
str2code | 文字列を ASCII コード値に変換する。 | |
str2int | 文字列を整数値に変換する。 | |
種別:ファイル操作 | Ver | 機能の簡易説明 |
fileclose | ファイルハンドルを閉じる。 | |
fileopen | ファイルを開く。 | |
fileread | 4.48以降 | ファイルを読む。 |
filesearch | ファイルまたはフォルダがあるか確かめる。 | |
foldersearch | 4.69以降 | フォルダがあるか確かめる。 |
種別:その他 | Ver | 機能の簡易説明 |
inputbox | 文字列を入力するためのダイアログボックスを開く。 | |
4.53以降 | デフォルト入力文字を設定するオプションの追加。 | |
4.54以降 | 特殊文字の解釈を制御するオプションの追加。 | |
messagebox | ダイアログボックスを開き、ユーザーにメッセージを知らせる。 | |
4.54以降 | 特殊文字の解釈を制御するオプションの追加。 | |
4.60以降 | キャンセル時にマクロ停止を確認する機能の追加。 |
マクロの使い方
Windows へ拡張子 .ttl を ttpmacro.exe へ関連付けし、実行します。タイミング
任意のタイミングで実行が可能です。指定方法
マクロ実行時に出力される入力ダイアログボックスへ BOM 情報を確認したいファイル名を、相対パスもしくは絶対パスで入力のうえ、OK ボタンをクリックしてください。コード
著作権情報
このサンプルマクロに関する著作権は、当サイト管理者が所有しています。著作権者
神場 和也ライセンス
3条項BSDライセンス関連情報
(なし)サンプルコード
ファイルダウンロード
ckbom.zip※ 解凍してご利用ください。
項目 | 内容 |
---|---|
文字コード | Shift JIS |
実行確認バージョン | Tera Term Ver 4.102 |
備考 | 下記コピペ用ソースコードをファイルに保存したものです。 |
コピペ用
以下のソースコードをファイルに保存のうえご利用ください。※ UTF-8 で保存した場合は、Tera Term Ver 4.102 以降で実行する必要があります。詳細は マクロファイルの仕様 を参照してください。
・対象ファイルの BOM (Byte Order mark) を確認するマクロ
想定ファイル名:ckbom.ttl
; 対象ファイルの BOM (Byte Order mark) を確認する ; ; File: ckbom.ttl ; Description: BOM check. ; Environment: generic ; Update: 2019/7/7 ; Author: Kazuya Jimba ;;; 変数設定 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 対象ファイルのデフォルト設定 defaultfile = 'dummy.txt' ; 符号化方式の確認用変数設定 ; 符号化方式 バイトオーダーマーク ; UTF-8 = 0xEF 0xBB 0xBF ; Tera Term: 15711167 ; UTF-16 = 0xFE 0xFF ; Tera Term: 65279 ; UTF-16 = 0xFF 0xFE ; Tera Term: 65534 ; UTF-8 BOM 整数値 (3byte) str2int utf8bomc1 '0xEF' ; 239 str2int utf8bomc2 '0xBB' ; 187 str2int utf8bomc3 '0xBF' ; 191 utf8bom2byte = utf8bomc1 * 256 + utf8bomc2 utf8bom3byte = utf8bomc1 * 256 * 256 + utf8bomc2 * 256 + utf8bomc3 ; UTF-16 BOM 整数値 (2byte) str2int UTF16bomcA '0xFE' ; 254 str2int UTF16bomcB '0xFF' ; 255 ; UTF-16 Big endian (上位バイトから順番にメモリに並べる方式) utf16BigEn = UTF16bomcA * 256 + UTF16bomcB ; UTF-16 Little endian (下位バイトからさかさまにメモリに並べる方式) utf16LittleEn = UTF16bomcB * 256 + UTF16bomcA ;;; メイン処理 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; message = "BOM を確認したいファイル名を入力してください。" title = "ファイル名入力" inputbox message title defaultfile targetname = inputstr ; サブルーチンのコール ;call chkfile call CheckBOM messagebox result 'result' ;;; 終了処理 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; マクロの終了 end ;;; サブルーチン ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; :chkfile ; 変数 targetname 内の文字列がファイルかフォルダかを判定するサブルーチン ; result ; 0 = 対象は存在しなかった。 ; 1 = 対象はフォルダだった。 ; 2 = 対象はファイルだった。 filesearch targetname if result = 1 then ; 対象が存在する場合 ; フォルダであるか確認する foldersearch targetname if result = 1 then ; フォルダの場合 (存在する対象がフォルダである) result = 1 else ; ファイルの場合 (存在するがフォルダではない) result = 2 endif else ; 対象が存在しない場合 result = 0 endif return :CheckBOM ; ファイル targetname 先頭バイト文字列が BOM かどうかを判定するサブルーチン ; result ; -1 = 対象 BOM は UTF-8 のはずだが情報が不正。 ; 0 = 対象に BOM はなかった。 ; 1 = 対象 BOM は UTF-8 を示している。 ; 2 = 対象 BOM は UTF-16 Big Endian を示している。 ; 3 = 対象 BOM は UTF-16 Little Endian を示している。 ; 対象ファイルの有無を確認 call chkfile ; 対象が存在する場合に BOM を確認 if result = 2 then ; 上位 2 byte を取得 fileopen fhandle targetname 0 fileread fhandle 2 data fileclose fhandle ; 上位 2 byte を整数値へ変換 str2code _2byte data ; 上位 2 byte の整数値を比較 if _2byte == utf8bom2byte then ; 上位 3 byte を取得 fileopen fhandle targetname 0 fileread fhandle 3 data fileclose fhandle ; 上位 3 byte を整数値へ変換 str2code _3byte data if _3byte == utf8bom3byte then result = 1 else result = -1 endif elseif _2byte == utf16BigEn then result = 2 elseif _2byte == utf16LittleEn then result = 3 else result = 0 endif endif return