前書き
ご存じの方もいるかもしれませんが、URLには実際に特別なことをする文字のリストがあります。例えば、/
文字がURLの一部を分離し、そして?
、&
と=
文字がサーバにクエリパラメータを渡すために使用されています。実際、特別な機能を持つ文字の束があります$&+,/:;=?@
。特別な機能以外の理由でURLでこれらの文字を使用する必要がある場合、percent-encodingと呼ばれる処理を行う必要があります。
パーセントエンコーディングは、文字の16進値を取得%
し、その先頭に文字を付加する場合です。たとえば、文字?
はとしてエンコードされ%3F
、文字&
はとしてエンコードされ%26
ます。特にURLでは、解析の問題を引き起こすことなく、これらの文字をURL経由でデータとして送信できます。あなたの課題は、文字列を取得し、エンコードする必要があるすべての文字をパーセントエンコードすることです。
チャレンジ
コードポイント00-FF(ASCIIおよび拡張ASCII文字)の文字で構成される単一の文字列を取り込むプログラムまたは関数を作成します。その後、必要に応じて、各文字をパーセントエンコードした同じ文字列を出力または返す必要があります。このタスクを実行するビルトインは許可されておらず、標準的な抜け穴もありません。参考のために、パーセントエンコードする必要があるすべての文字のリストを以下に示します。
- 制御文字(コードポイント00-1Fおよび7F)
- 拡張ASCII文字(コードポイント80-FF)
- 予約文字(
$&+,/:;=?@
、つまりコードポイント24、26、2B、2C、2F、3A、3B、3D、3F、40) - 安全でない文字(
" <>#%{}|\^~[]`
、つまりコードポイント20、22、3C、3E、23、25、7B、7D、7C、5C、5E、7E、5B、5D、60)
同じリストがありますが、代わりに10進コードポイントのリストがあります。
0-31, 32, 34, 35, 36, 37, 38, 43, 44, 47, 58, 59, 60, 62, 61, 63, 64, 91, 92, 93, 94, 96, 123, 124, 125, 126, 127, 128-255
これはコードゴルフであるため、バイト単位の最短コード(または承認された代替スコアリング方法)が勝ちます!
テストケース
http://codegolf.stackexchange.com/ => http%3A%2F%2Fcodegolf.stackexchange.com%2F
[@=>]{#} => %5B%40%3D%3E%5D%7B%23%7D
Test String => Test%20String
ÑÉÐÔ® => %D1%C9%D0%D4%AE
=> %0F%16%7F (Control characters 0F, 16, and 7F)
¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ => %80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF (Extended ASCII characters 80-FF)
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ => %20!%22%23%24%25%26'()*%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E
EF
は疑問符が含まれていないと確信しています。