out of curiosity I worked out the encoding, at least partly. It takes the last 4 bits of the first byte and the last 6 bits of the remaining two from each triplet, so we can directly decode like this:
cdecode[s_String] :=
FromCharacterCode@FromDigits[
Join @@ MapThread[IntegerDigits[FromDigits[#1, 16], 2][[#2 ;;]] &,
{StringTake[#, Array[{#,3 # +- 1} &, /@3 Range[2,#} 8&, 3]], {-4, -6, -6}}],
2] & /@
StringTake[
sStringTake[s, Array[{#,9 # +- 8} &, /@9 Range[1,#} Floor[StringLength[s]&, Floor[StringLength@s/9] - 8, 9]]]]//StringJoin
StringJoin@cdecode["=E6=B5=8B=E8=AF=95=E4=B8=80=E4=B8=8B"]cdecode["=E6=B5=8B=E8=AF=95=E4=B8=80=E4=B8=8B"]
same string
No doubt URLDecode
is the more robust way to go. Note there are 8 bits that have been ignored here. Presumably the 'E' signifies the start of a 3-byte code - that's ignored here an should be checked.