From 3b9b63da18ebbe8aaa793053815c1b08797cc258 Mon Sep 17 00:00:00 2001 From: "srowen@gmail.com" Date: Wed, 13 Feb 2013 17:27:55 +0000 Subject: [PATCH] URL-decode email address in mailto: link git-svn-id: https://zxing.googlecode.com/svn/trunk@2573 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- .../client/result/EmailAddressResultParser.java | 1 + .../com/google/zxing/client/result/ResultParser.java | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/core/src/com/google/zxing/client/result/EmailAddressResultParser.java b/core/src/com/google/zxing/client/result/EmailAddressResultParser.java index 87b627705..49fa86448 100644 --- a/core/src/com/google/zxing/client/result/EmailAddressResultParser.java +++ b/core/src/com/google/zxing/client/result/EmailAddressResultParser.java @@ -39,6 +39,7 @@ public final class EmailAddressResultParser extends ResultParser { if (queryStart >= 0) { emailAddress = emailAddress.substring(0, queryStart); } + emailAddress = urlDecode(emailAddress); Map nameValues = parseNameValuePairs(rawText); String subject = null; String body = null; diff --git a/core/src/com/google/zxing/client/result/ResultParser.java b/core/src/com/google/zxing/client/result/ResultParser.java index c6d93542f..df0bab625 100644 --- a/core/src/com/google/zxing/client/result/ResultParser.java +++ b/core/src/com/google/zxing/client/result/ResultParser.java @@ -184,15 +184,21 @@ public abstract class ResultParser { String key = keyValueTokens[0]; String value = keyValueTokens[1]; try { - value = URLDecoder.decode(value, "UTF-8"); + value = urlDecode(value); result.put(key, value); - } catch (UnsupportedEncodingException uee) { - throw new IllegalStateException(uee); // can't happen } catch (IllegalArgumentException iae) { // continue; invalid data such as an escape like %0t } } } + + static String urlDecode(String encoded) { + try { + return URLDecoder.decode(encoded, "UTF-8"); + } catch (UnsupportedEncodingException uee) { + throw new IllegalStateException(uee); // can't happen + } + } static String[] matchPrefixedField(String prefix, String rawText, char endChar, boolean trim) { List matches = null;