소개
아시다시피 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물음표가 포함되어 있지 않습니다.