Switchで日本語を使うとバグが出る【UUJ】

■質問

NGUIのPopupList、EventReceiverで以下のメソッドを呼び出してます。
すると何故か「剣」を選んだときは「使用武器に剣が設定されました」とコンソールに表示されるのですが、
「弓」を選ぶと「武器選択でエラーが発生しました。」と表示されます。
もちろん、Debug.Log( val ); のログには「弓」と表示されます。
正常に動作するのは「剣」「格闘」「聖術」でそれ以外はエラーになります。
対処法をご存知の方があればご教授をお願いします。

private void OnSelectionChange(string val)
{
Debug.Log( val );
switch ( val ){
case “-“:break;
case “剣”: Debug.Log(“使用武器に剣が設定されました”); break;
case “弓”: Debug.Log(“使用武器に弓が設定されました”); break;
case “槍”: Debug.Log(“使用武器に槍が設定されました”); break;
case “斧”: Debug.Log(“使用武器に斧が設定されました”); break;
case “棍棒”: Debug.Log(“使用武器に棍棒が設定されました”); break;
case “格闘”: Debug.Log(“使用武器に格闘が設定されました”); break;
case “魔術”: Debug.Log(“使用武器に魔術が設定されました”); break;
case “聖術”: Debug.Log(“使用武器に聖術が設定されました”); break;
default: Debug.Log(“武器選択でエラーが発生しました。”); break;
}
}


■回答

ソースファイルをUTF-8(BOM付き)で保存されていてもエラーが出るのでしょうか?
そのあたりが怪しそうです


全ソースをUTF-8(BOM付き)に統一しましたが、剣が正常に動作して
それ以外がエラーを吐くようになりました。


コメント以外で日本語を書くというのは、あまり推奨できません。

日本語などはコードを動作させる際に環境によって文字コードが変わってしまうからです。
日本語版のWindowsではShift-JISがデフォルトでは選ばれてしまいますし、英語版Winedowsでは別の文字コードになったような気がします。

http://dobon.net/vb/dotnet/string/getencoding.html
このページに書かれ
ている関数を使うと、文字列をバイト列に変換できるので文字コードによる間違いであることが確認できるのではないでしょうか。
また、System.Encoding.Defaultの文字コードがcase文の中の文字列の文字コードになっていると思います。
その文字コードと、入力されてくる文字コードが違っていたら、うまくいきません。
例えば、入力されてくる文字列をXMLなどからとっているのであれば、普通UTF-8で、System.Encoding.Defaultは普通Shift-JISなのでうまくいかないのではないでしょうか。


バイト列にすると同じ漢字なのに違うデータになっている事が分かりました。
使用しているNGUIのPopupListから引数を貰う時はstringで受け取るしか無いので
・リストは英文字だけ入力する
・日本語が必要な場合はスクリプトでリストのLabel内容を書き換える
で対処したいと思います。

Comments

comments

スポンサーリンク
336*280px
336*280px

フォローする

スポンサーリンク
336*280px