理想的には、表示可能example.com/resources/äFg4вNгё5
な文字の最小数のようなものが必要ですが、HTTP 経由で送信する前にパーセントでエンコードする必要があることは気にしないでください。
128b UUID を最小数の可視文字に効率的にエンコードし、結果に URL を壊す文字が含まれないようにするスキームを教えてもらえますか?
理想的には、表示可能example.com/resources/äFg4вNгё5
な文字の最小数のようなものが必要ですが、HTTP 経由で送信する前にパーセントでエンコードする必要があることは気にしないでください。
128b UUID を最小数の可視文字に効率的にエンコードし、結果に URL を壊す文字が含まれないようにするスキームを教えてもらえますか?
Base-64はこれに適しています。
{098ef7bc-a96c-43a9-927a-912fc7471ba2}
次のようにエンコードできます
vPeOCWypqUOSepEvx0cbog
文字列の長さは常に4の倍数になるため、最後の通常の等号は削除できます。また、andの代わりに+
、/
安全な文字を使用できます。次から2つ選択できます。-
.
_
~
詳しくは:
URLセーフなbase64文字列を使用しています。以下は、これを行う Python コードの一部です*。
最後の行は、Base 64 エンコーディングが末尾に付けるのが好きな「=」または「==」記号を削除します。これらは文字を URL に挿入することをより困難にし、情報の逆エンコードにのみ必要であり、必要ではありません。ここで行われます。
import base64
import uuid
# get a UUID - URL safe, Base64
def get_a_Uuid():
r_uuid = base64.urlsafe_b64encode(uuid.uuid4().bytes)
return r_uuid.replace('=', '')
*
これは標準に従います: base64.urlsafe_b64encode
RFC 3548 および 4648 に従いますhttps://docs.python.org/2/library/base64.htmlを参照してください。RFC 4648 §3.2を==
参照してください。UUID/GUID はRFC 4122で指定されています。 §4.1 フォーマットには、「UUID フォーマットは 16 オクテットです」と記載されています。-関数は、これらの 16 オクテットをエンコードします。
base64