パーセントエンコーディングパラメーター
X API の一部、特に OAuth 署名を扱う箇所では、文字列を RFC 3986, Section 2.1 に従ってエンコードする必要があります。URL エンコーディングアルゴリズムの多くの実装は RFC 3986 と完全に互換ではないため、不正なエンコーディングが多くの OAuth 署名エラーの原因となっています。そのため、使用すべき厳密な署名アルゴリズムをこのページで扱います。 このページでは、RFC 3986, Section 2.1 に記載された URL エンコーディングプロセスを扱います。このドキュメントとの間で不明点や矛盾がある場合は、その仕様を参照してください。文字列のエンコード
以下のアルゴリズムでは、文字列 SRC の値をバイト単位で文字列 DST にコピーしてエンコードすることを想定しています。 ステップ 1: SRC に未読のバイトが含まれている間、SRC から次のバイト (8 ビット) を読み込む。 通常は文字とみなされますが、文字が複数バイトになる可能性があるエンコーディング (UTF-8 など) の場合は、最初の 1 バイトのみを読み込みます。 ステップ 2: 読み込んだバイトが以下の ASCII の対応表のいずれかに一致するかチェックする。 以下の表は可読性のため複数の行に分けていますが、読み込んだバイトが表全体のいずれかに存在するかどうかだけを判断すれば十分で、特定の行を判別する必要はありません。| 名前 | ASCII 文字 | 対応するバイト値 |
|---|---|---|
| 数字 | ’0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ | 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39 |
| 大文字 | ’A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘O’, ‘P’, ‘Q’, ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’, ‘Y’, ‘Z’ | 0x41, 0x42, 0x43, 0x44, 0x45,0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B,0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51,0x52, 0x53, 0x54, 0x55, 0x56, 0x57,0x58, 0x59, 0x5A |
| 小文字 | ’a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’, ‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’, ‘y’, ‘z’ | 0x61, 0x62, 0x63, 0x64, 0x65,0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B,0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71,0x72, 0x73, 0x74, 0x75, 0x76, 0x77,0x78, 0x79, 0x7A |
| 予約された文字 | ’-’, ’.’, ’_’, ’~‘ | 0x2D, 0x2E, 0x5F, 0x7E |
例
以下の例は、自分のコードの出力と比較するのに役立ちます。差異があればすべてエラーと見なすべきです。スペースが「+」文字としてエンコードされている例は、誤ったエンコードの一例です。| 元の文字列 | エンコード後の文字列 |
|---|---|
| Ladies + Gentlemen | Ladies%20%2B%20Gentlemen |
| An encoded string! | An%20encoded%20string%21 |
| Dogs, Cats & Mice | Dogs%2C%20Cats%20%26%20Mice |
| ☃ | %E2%98%83 |