LuaTeX において、Unicode 文字列は UTF-8 にエンコードされた形で Lua に渡っている。それを確かめる実験。
{\lccode`Z="3042 \lowercase{\gdef\hiraA{Z}}}
\directlua{ local str, pc = "\hiraA", string.char(37)
for i = 1, str:len() do tex.write((pc.."02X"):format(str:byte(i))) end
}
\bye
これをコンパイルすると出力は「E38182」になる。
1 行目では、\lowercase
を利用して、符号値 U+3042 の文字トークンのみからなるマクロ \hiraA
を定義している。要するに \gdef\hiraA{あ}
と同じであるが、入力文字コード(これも UTF-8 である)の影響がないことを明確化するために敢えてこうしている。\directlua
の中身は、Lua 文字列 "あ"
の各バイト値を 16 進数で出力するものである。結果の「E38182」は U+3042 の UTF-8 表現であるから、Lua が UTF-8 のバイト列を受け取ることが判った。