試してみたのですが、Ruby 1.9 で実際に日本語を含む PS ファイルを処理すると
c:/usr/local/share/texmf/scripts/uptex/convbkmk.rb:342:in `conv_string_to_utf16be': incompatible character encodings: UT
F-8 and UTF-16BE (Encoding::CompatibilityError)
from c:/usr/local/share/texmf/scripts/uptex/convbkmk.rb:384:in `file_treatment'
from c:/usr/local/share/texmf/scripts/uptex/convbkmk.rb:404:in `<main>'
のエラーになります。
342 行目は以下の文があります。
conv16be = "\xFE\xFF" + conv.utf8_to_utf16be # BOM U+FEFF, UTF-16BE
スクリプトエンコーディングが UTF-8 (encoding: utf-8
)の Ruby 1.9 では、右辺の 2 つの文字列のエンコーディングが不一致となって、結合が失敗するようです。
"\xFE\xFF"
のエンコーディングは UTF-8 (スクリプトエンコーディングに一致する。明らかに UTF-8 としては不正なのだが。)
conv.utf8_to_utf16be
のエンコーディングは UTF-16BE (String#encode
で UTF-16BE に変換した結果なので。)
正常に処理されるようにするには、例えば以下の何れかに修正する必要があります。
conv16be = "\xFE\xFF".force_encoding('UTF-16BE') + conv.utf8_to_utf16be
conv16be = "\uFEFF".encode('UTF-16BE') + conv.utf8_to_utf16be
(以上は UTF-16BE 同士で結合。なお \u
表現を含む文字列リテラルは UTF-8 になる。)
conv16be = ("\uFEFF" + conv).utf8_to_utf16be
(これは UTF-8 同士で結合してから変換。)