Aviutlで使える文字コードの話

Aviutlで使用できる文字コードについて紹介します。

(このページは「分かる人が分かればいいや」と思って書いているので、分からない人はテキトーに読み飛ばしてください。)

スポンサーリンク

Aviutl → Windows-31Jのみ

AviutlはWindows-31Jという名前の文字コードに対応しています。

Windows-31JShift_JISから派生した文字コードです

・「Aviutlの文字セットはShift_JISです」と書いているブログが多いですが、厳密に言うとWindows-31Jです。

Windows-31Jは、CP932MS932などとも呼ばれることもあります。(派生元を示してShift_JISと呼ばれることもあります)

 

なので、例えば動画ファイルを読み込む場合は、その動画ファイルのファイル名がWindows-31Jである必要があるし、その動画ファイルのパスにはWindows-31J以外の文字が含まれてはいけません。

  • 使えるファイル・パス名例
    • hoge123(半角文字)
    • HOGE123(全角英数字文字)
    • ほげ(ひらがな)
    • ホゲ(かたかな)
    • 動画(JIS第一水準、第二水準くらいの漢字) 
  • 使えないファイル・パス名
    • 😁(絵文字)
    • 𩸽(JIS第三水準、第四水準くらいの漢字)
    • 𐌀(古い時代の文字など)
    • 🄛(特殊な記号)

つまり、絵文字や一部漢字と言った「Unicodeにしかない文字」は使えません。

拡張編集のテキストオブジェクト → Unicode(U+FFFFまで)が使える

AviutlはWindows-31Jにしか対応していないようなのですが

拡張編集のテキストオブジェクトに入力する場合は、メモ帳などのテキストエディタを介してコピペすると、なぜかUnicodeのコードポイント「U+FFFF」までのUnicode文字が使えるようになります。

 

例えば、①~までの丸付き数字はWindows-31Jでも定義されているので、Aviutlのテキストに入力してもきちんと表示されますが

 

㉑~㊿(U+3251~U+32BF)までの丸付き数字は、Unicodeにしかない文字なので、入力しても「?」に変換されてしまいます。

 

しかし㉑~

  1. 一旦メモ帳に入力する
  2. メモ帳からコピーする
  3. Aviutlに貼り付ける

という風にすると、なぜか入力できてしまいます。

 

正直、なぜこのようにすると入力できるのか分からないのですが、UnicodeのU+FFFFまで(2バイトまで)入力できる点から察するに

 

  • Aviutl(開発言語:C++)で使われている文字のデータ型がワイド文字(2バイト)だから
  • exoファイルのtext=の部分で保存されるテキストの形式がUTF-16LE(最大4バイト)だから
    • 例えば、𩸽(ほっけ)という文字を入力すると、「・・」と表示されてしまいますが(画像1枚目)、
      入力した状態でタイムライン上で右クリック → ファイル → オブジェクトファイルのエクスポートから.exoファイルとして出力して、text=の部分を見てみると、きちんとUTF-16のバイト列として保存できていることが確認できます。(画像2枚目)


      ▲ちなみに「67d8 3dde」は、ビッグエンディアンに直すと「d867 de3d」なので、UTF-16のサロゲートペアのコードポイントにも一致しています。

などが関係しているかな?と思うのですが、正直全然わかりません・・。

例えば、IMEでUnicode文字を入力するとAviutlに「そんな文字は知らん!」って拒否されるけど、コピペだとIMEを介さないからAviutlのチェックをスルーできる・・みたいな感じなんですかね?そしてスルーした結果、Aviutlでは2バイトまで保存できる機能があるので(ついでに言うとUTF-16で)、コピペだと保存できちゃうと・・。そんな感じなんですかね・・。

(もし詳しい方がいればコメント欄などで教えていただけると嬉しいです・・)

 

ちなみに、絵文字(例えば😁のようなもの)はすべてU+1F600以降に収録されているので、必然的にすべて4バイトになります。
なのでAviutlでも使えません。

関連【Aviutl】絵文字を表示する方法

 

このページの情報は以上です。

 

コメント

タイトルとURLをコピーしました