一人もくもく会 α verでサービス開始しました。

cocos2d-jsでIn-app billingの文字化け対策

cocos2d-jsを使ったAndroidアプリで、
In-app billingのアイテムデータを取得して価格を表示しようとしたら
思い切り文字化けしていた。(円マークが全角だったので)
どうもJavaからjavascript側にデータを渡す際に文字化けを起こしてしまうらしい。

In-app billingで取得したJSONをそのまま渡していたのだが、
よく見るとこれは全角文字がunicodeエスケープされていない。
他のアプリではunicodeエスケープされていると問題なかったので
下記
JavaのUnicode文字列の変換用メソッド
で紹介されているメソッドを改造して、
JSONの全角文字だけをエスケープする関数を作ってjs側に渡したら問題なく動くようになった。

private static String convertToUnicode(String original)
{
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < original.length(); i++) {
    	int code = Character.codePointAt(original, i);
    	if (code < 256) {
    		sb.append(original.charAt(i));
    	} else {
    		sb.append(String.format("\\u%04X", Character.codePointAt(original, i)));
    	}
    }
    String unicode = sb.toString();
    return unicode;
}