Compare commits

...

2 commits

Author SHA1 Message Date
f18f145ead Added Kotlin badge 2023-01-07 07:50:55 -08:00
67ecf7f069 Minor cleanup 2023-01-07 07:50:30 -08:00
2 changed files with 9 additions and 9 deletions

View file

@ -1,4 +1,5 @@
[![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![License](https://img.shields.io/badge/kotlin-1.8.0-blue)](https://kotlinlang.org/)
[![Nexus Snapshot](https://img.shields.io/nexus/s/net.thauvin.erik/urlencoder?server=https%3A%2F%2Foss.sonatype.org%2F)](https://oss.sonatype.org/content/repositories/snapshots/net/thauvin/erik/urlencoder/) [![Nexus Snapshot](https://img.shields.io/nexus/s/net.thauvin.erik/urlencoder?server=https%3A%2F%2Foss.sonatype.org%2F)](https://oss.sonatype.org/content/repositories/snapshots/net/thauvin/erik/urlencoder/)
[![Release](https://img.shields.io/github/release/ethauvin/urlencoder.svg)](https://github.com/ethauvin/urlencoder/releases/latest) [![Release](https://img.shields.io/github/release/ethauvin/urlencoder.svg)](https://github.com/ethauvin/urlencoder/releases/latest)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/net.thauvin.erik/urlencoder/badge.svg?color=blue)](https://maven-badges.herokuapp.com/maven-central/net.thauvin.erik/urlencoder) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/net.thauvin.erik/urlencoder/badge.svg?color=blue)](https://maven-badges.herokuapp.com/maven-central/net.thauvin.erik/urlencoder)

View file

@ -41,18 +41,19 @@ object UrlEncoder {
private val hexDigits = "0123456789ABCDEF".toCharArray() private val hexDigits = "0123456789ABCDEF".toCharArray()
internal val usage = internal val usage =
"Usage : java -jar urlencoder-*all.jar [-ed] text" + System.lineSeparator() + "Usage : java -jar urlencoder-*all.jar [-ed] text" + System.lineSeparator() +
"Encode and decode URL components defensively." + System.lineSeparator() + " -e encode (default) " + "Encode and decode URL components defensively." + System.lineSeparator() +
System.lineSeparator() + " -d decode" " -e encode (default) " + System.lineSeparator() +
" -d decode"
// see https://www.rfc-editor.org/rfc/rfc3986#page-13 // see https://www.rfc-editor.org/rfc/rfc3986#page-13
// and https://url.spec.whatwg.org/#application-x-www-form-urlencoded-percent-encode-set // and https://url.spec.whatwg.org/#application-x-www-form-urlencoded-percent-encode-set
private val unreservedChars = BitSet('z'.code + 1).apply { private val unreservedChars = BitSet('z'.code + 1).apply {
set('-') set('-'.code)
set('.') set('.'.code)
for (c in '0'..'9') { for (c in '0'.code..'9'.code) {
set(c) set(c)
} }
for (c in 'A'..'Z') { for (c in 'A'.code..'Z'.code) {
set(c) set(c)
} }
set('_'.code) set('_'.code)
@ -61,8 +62,6 @@ object UrlEncoder {
} }
} }
private fun BitSet.set(c: Char) = this.set(c.code)
// see https://www.rfc-editor.org/rfc/rfc3986#page-13 // see https://www.rfc-editor.org/rfc/rfc3986#page-13
// and https://url.spec.whatwg.org/#application-x-www-form-urlencoded-percent-encode-set // and https://url.spec.whatwg.org/#application-x-www-form-urlencoded-percent-encode-set
private fun Char.isUnreserved(): Boolean { private fun Char.isUnreserved(): Boolean {
@ -117,7 +116,7 @@ object UrlEncoder {
bytesBuffer[bytesPos++] = v.toByte() bytesBuffer[bytesPos++] = v.toByte()
i += 2 i += 2
} catch (e: NumberFormatException) { } catch (e: NumberFormatException) {
throw IllegalArgumentException("Illegal characters in escape sequence: $e.message") throw IllegalArgumentException("Illegal characters in escape sequence: $e.message", e)
} }
} else { } else {
if (bytesBuffer != null) { if (bytesBuffer != null) {