The + sign is also used to encode spaces, so it needs to be url encoded. Amazon does not like other chars such as = to be encoded in the signature, so encoding the whole url doesn't work