はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】UnityWebRequest.EscapeURLメソッド、もしかしてバグってる??

Unityのバージョン unity2018.4.0f1

はじめに

今回はUnityWebRequest.EscapeURLメソッドで指定する文字コードについての記事になります!

そもそもUnityWebRequest.EscapeURLメソッド普通の文字をURLで利用できるように変換(URLエンコード)するためのものです。

ただ実際にこれを使ってみてややおかしな挙動をしている気がしました。

このことについて少しだけ掘り下げていきたいと思います。

メソッドの説明

本題に触れる前に少しだけメソッドの説明をしておきたいと思います。詳細は以下の通りです。

public static string EscapeURL (string s, Encoding e);
パラメーター 意味
s エスケープする文字を含む文字列
e 使用するテキストエンコード

Networking.UnityWebRequest-EscapeURL - Unity スクリプトリファレンス

一応エスケープする文字を含む文字列のみを引数とするオーバーロードもありますが、今回は省かせていただきます。

メソッドの扱い方はとてもシンプルで、このような感じで扱えます。

string escName = UnityWebRequest.EscapeURL("ここにURLエンコードしたい文字列を書く", Encoding.UTF8);

これを実際にいくつかの文字コードの種類で試してみました。

試してみる

実際に試してみたコードは以下の通りです。

using System.Text;
using UnityEngine;
using UnityEngine.Networking;

public class Test : MonoBehaviour
{
    private const string SOME_TEXT = "スポーツ";
    void Start()
    {
        string utf_8 = UnityWebRequest.EscapeURL(SOME_TEXT, Encoding.UTF8);
        Debug.Log(utf_8);                   //%e3%82%b9%e3%83%9d%e3%83%bc%e3%83%84

        string euc_jp = UnityWebRequest.EscapeURL(SOME_TEXT, Encoding.GetEncoding("euc-jp"));
        Debug.Log(euc_jp);                  //%e3%82%b9%e3%83%9d%e3%83%bc%e3%83%84

        string shift_jis = UnityWebRequest.EscapeURL(SOME_TEXT, Encoding.GetEncoding("shift_jis"));
        Debug.Log(shift_jis);               //%e3%82%b9%e3%83%9d%e3%83%bc%e3%83%84
    }

}

f:id:hanaaaaaachiru:20190702121208p:plain

ものの見事に全て同じ文字列が返ってきました。

自分が試した範囲では全てutf-8になっていたので、もはや打つ手なしな気がします。。

さいごに

実は前に記事を書いたのですが、UnityではHttpUtilityクラスが使えないみたいです。
www.hanachiru-blog.com

ここまでくると、utf-8以外でのURLエンコードはもはや自前実装しか残されていないという結論にいたってしまいました。

Unityさん、是非ご修正を・・・。