2012-07-11 8 views
12

example.com/resources/äFg4вNгё5、最小番号はとなります。文字が表示されることを理想的には考えていますが、HTTP経由で送信する前に%エンコードされている必要はありません。最小の文字数のURLで安全なUUID

128バイトのUUIDを可視文字の数が最小限になるように符号化するスキームに、結果がURLを壊す文字を持たないことを教えてください。

+2

国際文字はまだワームの缶のビットです。ブラウザでは常に動作しますが、メールクライアント、インスタントメッセンジャー、最も壊れやすいケース、SMSなど、さまざまなアプリケーションにコピーして貼り付けると、彼らは壊れてしまいます。あなたが同じウェブブラウザの外でこれらのリンクを使用しないという危険な仮定をしない限り、答えによって示唆されるようなBase64も最良のアプローチです。 – Ekevoo

答えて

15

Base-64はこれに適しています。

{098ef7bc-a96c-43a9-927a-912fc7471ba2} 

は、それらが常に文字列の長さを4、代わりの+/の複数を行うように端部に通常等しい符号は、ドロップすることができる

vPeOCWypqUOSepEvx0cbog 

として符号化することができ、いくつかの安全な文字を使用することができます。 -._~

詳細情報::

4
次の場所から2を選ぶことができます

私は、url-safeのbase64文字列を使用します。以下は、これを行ういくつかのPythonコードです*

最後の行は、ベース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を参照してくださいに従います。既知の長さのbase64エンコードデータからの==のストリッピングは、RFC 4648 §3.2を参照してください。 UUID/GUIDはRFC 4122で指定されています。 §4.1 Formatは「UUID形式は16オクテットです」と述べています。 base64 -fucntionは、これらの16オクテットをエンコードします。

+2

python3で動作しないので、代わりに使うべきです: 'return base64.urlsafe_b64encode(uuid.uuid4()。bytes).strip(" = ")'(Python 2でも動作し、unicode文字列を返します) –

関連する問題