Skyrim Mod導入トラブル事例:TESVTranslatorで原文・訳文が文字化けする
概要
TESVTranslatorでmodを開くと原文(または訳文)が文字化けした。
原文・訳文すべてが文字化けする場合
原文の一部が文字化けする場合
対策1(原文・訳文すべてが文字化けする場合)
原文・訳文ともにすべてが文字化けする場合、日本語化済みのmodをUtf8で開かなかった可能性があります。
メニュー「オプション-Utf8-強制的にUtf8で開く」をチェックします。
もう一度modを開きます。
対策2(原文の一部が文字化けする場合)
原文の一部が文字化けする場合、Utf8で開いたことにより、欧米圏の特殊文字が文字化けした可能性があります。
メニュー「オプション-Utf8-強制的にUtf8で開く」のチェックを外します。
もう一度modを開きます。
さらにくわしい解説
「強制的にUtf8で開く」オプションの使い分けについて
次のように使い分けましょう。
・未翻訳のmodを開くとき:チェックしない
・日本語化済みのmodを開くとき:チェックする
「強制的にUtf8で開く」オプションの意味について
TESVTranslatorはmod中に含まれる翻訳対象文字列を読み込む際、「オプションと言語の設定」画面で指定された翻訳元言語に対応したコードページを使用します。
「強制的にUtf8で開く」は、翻訳元言語の設定を無視して「強制的」にUtf8のコードページを使用するという意味です。
恐らくほとんどの方は「オプションと言語の設定」画面で翻訳元言語:英語、翻訳先言語:日本語の設定にしていると思います。
英語のコードページはWindows-1252、日本語のコードページはUtf8なので、日本語化済みのmodを普通に開くと、保存文字のコードページと読み込みコードページの不一致で文字化けします。この現象を回避するために「強制的にUtf8で開く」オプションが用意されています。
ちなみに、言語毎のコードページはTESVTranslatorインストールフォルダのcodepage.txtで定義されています。
「強制的にUtf8で開く」をチェックすると海外の文字が文字化けする理由
英語/フランス語/ドイツ語/スペイン語/イタリア語などではWindows-1252というコードページが使用されます。ラテン語由来の言語では256文字(1バイトで表現可能な文字数)もあればすべての文字が表現できるため、Asciiコードセット(128文字の基本的な文字)に特殊文字128文字を加えた256種類の文字を1文字=1バイトの形式で保存します。
一方、日本や中国などでは漢字が存在するので256文字ではとても足りません。ですので、Asciiコードセット(128文字の基本的な文字)と、コードの組み合わせで保存バイト長が可変にでき、多くの文字を表現できるUTF-8形式を使用します。
ところがUTF-8においては、Windows-1252の特殊文字(0x80以降)に対応するコードは文字の長さや種類を拡張する特殊コードとして扱われ、対応する文字が存在しません。このため不正コードと扱われ(フォールバック)、「◆にR」の記号で表示される結果となります。
他の言語でつくられたModを読み込む
Skyrimは世界中で愛されており、上記の言語以外で作られたModも存在します。言語によってはWindows-1252以外のコードページが使われています。
例えばロシア語はWindows-1251、チェコスロバキア・ハンガリー・ポーランド語はWindows-1250といった具合です。
こういったModを翻訳するには、「オプションと言語の設定」画面の翻訳元言語を変更する必要があります。
(翻訳辞書ための各言語のstringsファイルの入手が問題ですが・・・Steamの言語切替でダウンロードしなおせば揃うかも?)
中国語(おそらく韓国語も)ではUtf8が使われていますので、翻訳元言語の変更は必要なく、「強制的にUtf8で開く」を使えば良いと思われます。
文字化けした日本語化xmlファイルの存在について
原文に特殊文字が含まれていても、コードページを適切に処理すれば、正しい日本語化xmlファイルを作成できます。
ところが、流通している日本語化xmlの中には、原文が文字化けした状態で作成したものが存在します。
このような日本語化xmlファイルを読み込んで翻訳する場合、文字化け覚悟で「強制的にUtf8で開く」をチェックしてmodを読み込まないとうまく翻訳されません。
どうやって元の言語(コードページ)を判断するか?
拙作のツールTESVKanjiCheckerの活用をお勧めします。
ツールの画面にesm/espファイルをドロップし、次のようなことが行えます。
・文章を読んで言語からコードページを推測する
・フォールバックによる文字化けを検出する
・画面下部の言語を切り替えて適切なコードページを判定する
・バニラのフォントで文字化けする文字を検出する(これが本来の目的)
以上です。