hapi の cookie に日本語をセットするとき
◆ JSON の base64 化で日本語がおかしくなる
◆ 日本語を含むなら encoding は none にして自力で encode する
◆ 日本語を含むなら encoding は none にして自力で encode する
hapi では server.state で cookie を管理できます
encoding に base64json を指定すれば JSON 化して base64 変換した値を書き込むのでオブジェクトを保存することもできます
サーバサイドのセッションではないのでユーザが書き換えたらまずいものはセットしたらダメです
便利な機能なのですが base64 変換というと日本語ってどうなるんだろう?と疑問に思いました
早速試してみると
おかしな値になってます
マルチバイト文字対応してないみたいですね
JSON 化したあとに自分で変換するのはできなそうなので encoding は none にして自力でやったほうがいいかもしれません
cookie なら base64 じゃなく escape で十分だと思うので
と言う感じです
encoding に base64json を指定すれば JSON 化して base64 変換した値を書き込むのでオブジェクトを保存することもできます
サーバサイドのセッションではないのでユーザが書き換えたらまずいものはセットしたらダメです
便利な機能なのですが base64 変換というと日本語ってどうなるんだろう?と疑問に思いました
早速試してみると
server.state("data", { isSecure: false, encoding: "base64json" })
h.response("ok").state("data", {a:"あいう", b: "日本語"})
JSON.parse(atob("eyJhIjoiQkRGIiwiYiI6IuUsniJ9"))
// {a: "BDF", b: "å,"}
おかしな値になってます
マルチバイト文字対応してないみたいですね
JSON 化したあとに自分で変換するのはできなそうなので encoding は none にして自力でやったほうがいいかもしれません
cookie なら base64 じゃなく escape で十分だと思うので
// encoding: "none"
h.response("ok").state("data", escape(JSON.stringify({a: "あいう", b: "日本語"})))
と言う感じです