docs: @Nonnull
      public static String encode(@Nonnull String s) {
          try {
              boolean escaped = false;
  
              StringBuilder out = new StringBuilder(s.length());
  
              ByteArrayOutputStream buf = new ByteArrayOutputStream();
              OutputStreamWriter w = new OutputStreamWriter(buf, StandardCharsets.UTF_8);
  
              for (int i = 0; i < s.length(); i++) {
                  int c = s.charAt(i);
                  if (c<128 && c!=' ') {
                      out.append((char) c);
                  } else {
                      // 1 char -> UTF8
                      w.write(c);
                      w.flush();
                      for (byte b : buf.toByteArray()) {
                          out.append('%');
                          out.append(toDigit((b >> 4) & 0xF));
                          out.append(toDigit(b & 0xF));
                      }
                      buf.reset();
                      escaped = true;
                  }
              }
  
              return escaped ? out.toString() : s;
          } catch (IOException e) {
              throw new Error(e); // impossible
          }
      }