修正版も書いておきます。
# ついでに要らないのにいくつかのエンコード(コードページ)を追加してみました。
# 他のエンコードはレジストリのHKEY_CLASSES_ROOT\MIME\Database\Codepage以下を参照
# してください。
# (動作保証はしないですがどうやら動作しているようです)
#module "encodemod"
#const global CODEPAGE_S_JIS 932 ; Shift-JIS
#const global CODEPAGE_EUC_JP 51932 ; EUC-JP
#const global CODEPAGE_JIS 50220 ; iso-2022-jp
#const global CODEPAGE_UTF_7 65000 ; utf-7
#const global CODEPAGE_UTF_8 65001 ; utf-8
#const global CODEPAGE_UNICODE 1200 ; Unicode
#const global CODEPAGE_UNICODE_BE 1201 ; Unicode(Big-Endian)
#const global CODEPAGE_AUTODET_ALL 50001 ; auto detect all
#const global CODEPAGE_AUTODET 50932 ; auto detect
#usecom IMultiLanguage@encodemod "{275c23e1-3747-11d0-9fea-00aa003f8646}" \
"{275c23e2-3747-11d0-9fea-00aa003f8646}"
#comfunc MuLang_ConvertString 9 var, int, int, var, var, var, var
#deffunc encode_init
newcom pMLang, IMultiLanguage
return
#defcfunc encode var v1, int p1, var v2, int p2, local sSize, local dSize, local pdwMode
pdwMode = 0
sSize = -1
dSize = 0
sdim v2
MuLang_ConvertString pMLang, pdwMode, p1, p2, v1, sSize, v2, dSize
sdim v2, dSize
MuLang_ConvertString pMLang, pdwMode, p1, p2, v1, sSize, v2, dSize
return dSize
#deffunc encode_term
delcom pMLang
pMLang = 0
return
#global
#define ctype range(%1, %2, %3) (%1 > %2 & %1 < %3)
onexit *exit
encode_init
pStr = "こんにちは"
sdim encbuf
repeat encode(pStr, CODEPAGE_S_JIS, dStr, CODEPAGE_UTF_8)
tmp = peek(dStr, cnt)
if range(tmp, 0x29, 0x3a) | range(tmp, 0x40, 0x5b) | range(tmp, 0x60, 0x7b) {
encbuf += strf("%c", tmp)
} else {
encbuf += strf("%%%02x", tmp)
}
loop
mes encbuf
stop
*exit
encode_term
end