介绍
如您中某些人所知,URL实际上具有执行特殊功能的字符列表。例如,/
字符分开的网址的部分,并且?
,&
和=
字符用于查询参数传递给服务器。实际上,有一堆具有特殊功能的字符:$&+,/:;=?@
。除了特殊功能之外,如果出于其他任何原因需要在URL中使用这些字符,则必须执行称为percent-encoding的操作。
百分比编码是当您采用字符的十六进制值并将%
字符放在字符开头时。例如,字符?
将被编码为%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)
这是一个相同的列表,但是作为十进制代码点的列表:
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
不包含问号。