投稿日:2018-05-20 Sun
昨日の暗号の実験も兼ねて、FireBaseのCloud functions(言語はNode.js)にUnityからPOST通信でJson文字列を送ってみました。文字列はちゃんときてて見かけ上は
var jsonStr = {"id":"UnityEditor"};
var json = JSON.parse(jsonStr);
※ {"id":"UnityEditor"};がUnityから送った文字列です。
しかし・・・ しかしですよエラーです。
おかしい・・・・ 意味わからない。
Cloud functionsのエラーログを見ると{"id":"UnityEditor"} の20文字目が原因とある。
調べてみると最後の } の文字が0からスタートして19文字目で20文字目なんてない・・・ハズ。
Unityで暗号かけて、Node.js で複合してるせいなのか・・・・ それともそんな事しなくてもこうなるの?
とにかく、これはログとかに出ない最後になんか変な文字が入ってるなと思って
(これが結構プログラムしてると出くわす問題だったりします)
jsonStr = jsonStr.trim();
をかけてみました。効果なし・・・・・
う~む
とりあえず、jsonStrの文字数をログに出してみる・・
32文字・・・ えっ32文字だって・・・・ 全部で20文字なのに12文字多いのはどういうこっちゃ!! と思って
for(var i = 0 ; i < jsonStr .length ; i++)
{
console.log(jsonStr.charCodeAt(i));
}
で一文字ずつ文字コードをコンソールに書き出してみました。
20から32まで文字コード0が続いている・・・ 文字コード0!? そんな文字あるの?
しょうがないので色々しらべて
jsonStr = jsonStr.replace(new RegExp("^" + String.fromCharCode(0) + "+|" + String.fromCharCode(0) + "+$", "g"),'');
と、文字列の前後から余分な文字コード0の文字を削除する命令をつけてみました。
そしたら、うまくいった。
問題なく文字列をJson化してくれました。
毎回一発でうまくいかなくて、がっくりきますが、今回もそのパターン・。
とりあえず、うまくいってよかった。
△ PAGE UP