「剣皇の戦衣」の女性用衣装ですが、修正される前の衣装名は「祝祭衣装(チャンシュイ)」となっていて、チャンシュイの「チ」が「・」に置き換わっていましたが、これと同じ現象は昔から起きています。
[修正前の剣皇の戦衣の説明]
例えば、「チャイナドレス(赤)」の「チ」や「武功秘伝書」の「伝」、「ペアパーカー」の説明にある「ハートの形」の「形」が文字化けしているのを、今でも確認できます。
実はこれ、Shift_JIS(cp932)の典型的な文字化けの症状と合致しているのです。
「チ」や「伝」、「形」のShift_JISコードを調べると0x8360、0x9360、0x8C60と、共に2バイト目が0x60になっていることが判ります。
0x60は1バイト文字の「`」(バッククォート)であり、バッククォートはプログラム上、文字列の囲み文字として使用されることがある「メタ文字(制御文字)」です。
他にもメタ文字として認識してしまう2バイト文字は沢山あり、『ダメ文字』などと呼ばれたりしています。
参考: ダメ文字一覧表 - fudist 文字コード表 シフトJIS(Shift_JIS)
このことから、熱血江湖のプログラムは【2バイト目にバッククォートのコード(0x60)を含む全角文字を正しく認識できていない】と言うことがわかります。
ところが、近年追加になった「伝説の英雄コスチューム」や「チアガール」衣装では、この文字化けは発生せず、正常に表示されています。これは何故でしょう?
通常、プログラム上でメタ文字(またはメタ文字と誤認されてしまう文字)をデータとして使用する場合、エスケープ処理と言う作業が必要になります。
プログラムやスクリプトには、データ上のメタ文字を誤認しないようにするための「エスケープ文字」と言うものがあり、エスケープ文字を対象文字に付加することで、メタ文字を通常の文字として認識させる事が出来るようになっています。
本来はプログラム上でエスケープ処理を行うべきなのですが、プログラムの構造上それができない場合もあり、その場合はデータを入力する際に文字化けを予測して、データ内にエスケープ文字を付加しておく必要があります。
プログラムのソースがわからないので確かなことは言えませんが、「伝説の英雄コスチューム」や「チアガール」の場合は、データを入力する際に、入力を担当した人が適切にエスケープ処理を行ったのかも知れませんし、あるいは「剣皇の戦衣」は日本でのサービス開始以前に作られた衣装ですので、「チャイナドレス」や「武功秘伝書」と同様に、サービス開始時に作られたアイテム説明のデータが、文字化けを考慮していなかったのかも知れません。
熱血江湖は元々韓国で開発されているゲームですので、文字コードの違いによる文字化けに起因する不具合は必ず付きまといます。
「文字化け程度」と軽く考えがちですが、単に説明が化けて読めないだけならまだ良い方です。
もしこの文字化けが内部処理にかかわる部分で発生した場合、正常にファイルが読み込めなかったり、本来行われるべき処理が行われなかったりと言った、重大な不具合に発展する可能性もあります。
また、文字化け対策は適切に行っていても、データを入力する際にも注意が必要です。
Windowsでは使用フォントによっては、パッと見ただけでは入力ミスに気付かないことがあります。
半角英数で書かなければいけないものを全角で入力してしまったり、またはその逆といった事が良くあります。
大抵の場合は不正なデータが渡されても、エラーを出すか代替の値を設定し直すようにプログラムで処理するのですが、これらの値が渡されるのは「本来指定してはいけないデータを指定した時」であって、データを正しく指定すればこのような値が渡ることは無いため、リソースの節約や処理の高速化のために、あえて検出処理を行わないようにしている場合も多々あります。
ですがそこは人間。どんなに取り決めをして『やっちゃダメ』と言われても、変なデータを入力してしまうこともありますし、ましてや文字コードが異なる環境同士でのデータのやり取りを行うような場合は、例外処理を疎かには出来ないのです。
|