2

Crockford の base32 のURL で使用する ID を書きたいと思います。base32 npm モジュールを使用しています。

したがって、たとえば、ユーザーがhttp://domain/page/4A2A と入力した場合、 http://domain/page/4a2aと同じ基礎となる ID にマップしたいと思います。

これは、ユーザーが大文字と小文字の違い、または "l" と "1" の違いを気にする必要がなく、ユーザーが期待するページを取得するだけの、人間に優しい URL が必要だからです。

しかし、基本的にエンコーディングがどのように機能するかを理解するにはあまりにも薄暗いため、これを実装するのに苦労しています。最初に試しました:

var encoded1 = base32.encode('4a2a');
var encoded2 = base32.encode('4A2A');
console.log(encoded1, encoded2);

ただし、それらは異なる基になる ID にマップされます。

6hgk4r8 6h0k4g8

よし、多分私はデコードを使用する必要がありますか?

var encoded1 = base32.decode('4a2a');
var encoded2 = base32.decode('4A2A');
console.log(encoded1, encoded2);

いいえ、それは私に空の文字列を与えるだけです:

"    " 

4A2A と 4A2A を同じものにマップするにはどうすればよいですか?

4

3 に答える 3

0

混乱の原因は、base64 または base32 が数値を表す方法であるということですが、例ではテキスト文字列をエンコードまたはデコードしようとしています。

base32 としてのテキスト文字列のエンコードとデコードは、最初に文字列を大きな数値に変換することによって行われます。「4a2a」と「4A2A」をエンコードしている最初の例では、これらは2つの異なる数値を持つ文字列であり、その結果、2つの異なる値6hgk4r8 6h0k4g8を持つエンコードされたbase32数値に変換されます

4a2a と 4A2A を「デコード」すると、空の文字列が得られると言います。ただし、これは正しくありません。文字列は空ではありません。文字列として解釈されたときに、デコードされた数値がどのように見えるかが含まれています。つまり、4a2a は印刷できない文字を生成するため、何もないように見えます。見えない。必要なのは、文字列ではなくエンコーダー番号をフィードすることです。

于 2012-11-09T04:42:04.530 に答える
0

JavaScript は

parseInt(数値, 32)

num.toString(32)

Java および JavaScript のバージョン間で互換性のある方法で組み込まれています。

于 2013-09-04T20:52:56.857 に答える