     var i = index
     let len = length
     func process() throws {
-      if let k = collectString(i) {
+      if let k = collectFormUrlDecodedString(i) {
         keyToken = k
       } else {
         throw BodyParserError.Key

      let c = stream[i]
      if c == 38 { // &
        entryParser = .NextKey
        body[keyToken] = collectString(i)
        break
      } else if c >= 32 {
        // ignore
      } else if c == 0 {
        body[keyToken] = collectString(i)
        done = true
        index = length // Done. Exit.
        break

    return String.fromCharCodes(collectToken(endIndex))
  }

  mutating func collectFormUrlDecodedString(endIndex: Int) -> String? {
    let a = collectToken(endIndex)
    if let b = HexaUtils.formUrlDecode(a, maxBytes: a.count) {
      return String.fromCharCodes(b)
    }
    return nil
  }

  mutating func inBody() throws {
    let i = index
    let c = stream[i]
