From 9f45bab33c438bc3fc6e37ea99bbf09c9623adc4 Mon Sep 17 00:00:00 2001 From: srowen Date: Wed, 14 Mar 2012 17:09:47 +0000 Subject: [PATCH] Ignore UTF byte order mark when parsing result git-svn-id: https://zxing.googlecode.com/svn/trunk@2228 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- .../zxing/client/result/AddressBookAUResultParser.java | 2 +- .../client/result/AddressBookDoCoMoResultParser.java | 2 +- .../google/zxing/client/result/BizcardResultParser.java | 2 +- .../zxing/client/result/EmailAddressResultParser.java | 2 +- .../zxing/client/result/EmailDoCoMoResultParser.java | 2 +- .../zxing/client/result/ExpandedProductResultParser.java | 2 +- .../com/google/zxing/client/result/GeoResultParser.java | 6 +----- .../com/google/zxing/client/result/ISBNResultParser.java | 2 +- .../google/zxing/client/result/ProductResultParser.java | 2 +- .../src/com/google/zxing/client/result/ResultParser.java | 9 +++++++++ .../google/zxing/client/result/SMSMMSResultParser.java | 2 +- .../zxing/client/result/SMSTOMMSTOResultParser.java | 2 +- .../com/google/zxing/client/result/SMTPResultParser.java | 2 +- .../com/google/zxing/client/result/TelResultParser.java | 2 +- .../com/google/zxing/client/result/URIResultParser.java | 2 +- .../google/zxing/client/result/URLTOResultParser.java | 2 +- .../google/zxing/client/result/VCardResultParser.java | 2 +- .../google/zxing/client/result/VEventResultParser.java | 5 +---- .../com/google/zxing/client/result/WifiResultParser.java | 2 +- 19 files changed, 27 insertions(+), 25 deletions(-) diff --git a/core/src/com/google/zxing/client/result/AddressBookAUResultParser.java b/core/src/com/google/zxing/client/result/AddressBookAUResultParser.java index b30ce5021..ddb203bc2 100644 --- a/core/src/com/google/zxing/client/result/AddressBookAUResultParser.java +++ b/core/src/com/google/zxing/client/result/AddressBookAUResultParser.java @@ -33,7 +33,7 @@ public final class AddressBookAUResultParser extends ResultParser { @Override public AddressBookParsedResult parse(Result result) { - String rawText = result.getText(); + String rawText = getMassagedText(result); // MEMORY is mandatory; seems like a decent indicator, as does end-of-record separator CR/LF if (!rawText.contains("MEMORY") || !rawText.contains("\r\n")) { return null; diff --git a/core/src/com/google/zxing/client/result/AddressBookDoCoMoResultParser.java b/core/src/com/google/zxing/client/result/AddressBookDoCoMoResultParser.java index 67550791f..22da7f0b7 100644 --- a/core/src/com/google/zxing/client/result/AddressBookDoCoMoResultParser.java +++ b/core/src/com/google/zxing/client/result/AddressBookDoCoMoResultParser.java @@ -37,7 +37,7 @@ public final class AddressBookDoCoMoResultParser extends AbstractDoCoMoResultPar @Override public AddressBookParsedResult parse(Result result) { - String rawText = result.getText(); + String rawText = getMassagedText(result); if (!rawText.startsWith("MECARD:")) { return null; } diff --git a/core/src/com/google/zxing/client/result/BizcardResultParser.java b/core/src/com/google/zxing/client/result/BizcardResultParser.java index 88fa80288..9823853b8 100644 --- a/core/src/com/google/zxing/client/result/BizcardResultParser.java +++ b/core/src/com/google/zxing/client/result/BizcardResultParser.java @@ -36,7 +36,7 @@ public final class BizcardResultParser extends AbstractDoCoMoResultParser { @Override public AddressBookParsedResult parse(Result result) { - String rawText = result.getText(); + String rawText = getMassagedText(result); if (!rawText.startsWith("BIZCARD:")) { return null; } diff --git a/core/src/com/google/zxing/client/result/EmailAddressResultParser.java b/core/src/com/google/zxing/client/result/EmailAddressResultParser.java index a3b0487b6..87b627705 100644 --- a/core/src/com/google/zxing/client/result/EmailAddressResultParser.java +++ b/core/src/com/google/zxing/client/result/EmailAddressResultParser.java @@ -30,7 +30,7 @@ public final class EmailAddressResultParser extends ResultParser { @Override public EmailAddressParsedResult parse(Result result) { - String rawText = result.getText(); + String rawText = getMassagedText(result); String emailAddress; if (rawText.startsWith("mailto:") || rawText.startsWith("MAILTO:")) { // If it starts with mailto:, assume it is definitely trying to be an email address diff --git a/core/src/com/google/zxing/client/result/EmailDoCoMoResultParser.java b/core/src/com/google/zxing/client/result/EmailDoCoMoResultParser.java index 1350cf145..dfef4e1ab 100644 --- a/core/src/com/google/zxing/client/result/EmailDoCoMoResultParser.java +++ b/core/src/com/google/zxing/client/result/EmailDoCoMoResultParser.java @@ -33,7 +33,7 @@ public final class EmailDoCoMoResultParser extends AbstractDoCoMoResultParser { @Override public EmailAddressParsedResult parse(Result result) { - String rawText = result.getText(); + String rawText = getMassagedText(result); if (!rawText.startsWith("MATMSG:")) { return null; } diff --git a/core/src/com/google/zxing/client/result/ExpandedProductResultParser.java b/core/src/com/google/zxing/client/result/ExpandedProductResultParser.java index 5c0b26c7d..de74b7cf7 100644 --- a/core/src/com/google/zxing/client/result/ExpandedProductResultParser.java +++ b/core/src/com/google/zxing/client/result/ExpandedProductResultParser.java @@ -48,7 +48,7 @@ public final class ExpandedProductResultParser extends ResultParser { return null; } // Really neither of these should happen: - String rawText = result.getText(); + String rawText = getMassagedText(result); if (rawText == null) { // ExtendedProductParsedResult NOT created. Input text is NULL return null; diff --git a/core/src/com/google/zxing/client/result/GeoResultParser.java b/core/src/com/google/zxing/client/result/GeoResultParser.java index 37a813682..8b2b07f11 100644 --- a/core/src/com/google/zxing/client/result/GeoResultParser.java +++ b/core/src/com/google/zxing/client/result/GeoResultParser.java @@ -36,11 +36,7 @@ public final class GeoResultParser extends ResultParser { @Override public GeoParsedResult parse(Result result) { - String rawText = result.getText(); - if (rawText == null) { - return null; - } - + String rawText = getMassagedText(result); Matcher matcher = GEO_URL_PATTERN.matcher(rawText); if (!matcher.matches()) { return null; diff --git a/core/src/com/google/zxing/client/result/ISBNResultParser.java b/core/src/com/google/zxing/client/result/ISBNResultParser.java index cf2f70cd0..e957dd02b 100644 --- a/core/src/com/google/zxing/client/result/ISBNResultParser.java +++ b/core/src/com/google/zxing/client/result/ISBNResultParser.java @@ -35,7 +35,7 @@ public final class ISBNResultParser extends ResultParser { if (format != BarcodeFormat.EAN_13) { return null; } - String rawText = result.getText(); + String rawText = getMassagedText(result); int length = rawText.length(); if (length != 13) { return null; diff --git a/core/src/com/google/zxing/client/result/ProductResultParser.java b/core/src/com/google/zxing/client/result/ProductResultParser.java index 849247f0f..fae5a2760 100644 --- a/core/src/com/google/zxing/client/result/ProductResultParser.java +++ b/core/src/com/google/zxing/client/result/ProductResultParser.java @@ -35,7 +35,7 @@ public final class ProductResultParser extends ResultParser { format == BarcodeFormat.EAN_8 || format == BarcodeFormat.EAN_13)) { return null; } - String rawText = result.getText(); + String rawText = getMassagedText(result); int length = rawText.length(); for (int x = 0; x < length; x++) { char c = rawText.charAt(x); diff --git a/core/src/com/google/zxing/client/result/ResultParser.java b/core/src/com/google/zxing/client/result/ResultParser.java index 3b0e1992e..b8ec2486b 100644 --- a/core/src/com/google/zxing/client/result/ResultParser.java +++ b/core/src/com/google/zxing/client/result/ResultParser.java @@ -65,6 +65,7 @@ public abstract class ResultParser { private static final Pattern ALPHANUM = Pattern.compile("[a-zA-Z0-9]*"); private static final Pattern AMPERSAND = Pattern.compile("&"); private static final Pattern EQUALS = Pattern.compile("="); + private static final String BYTE_ORDER_MARK = "\ufeff"; /** * Attempts to parse the raw {@link Result}'s contents as a particular type @@ -73,6 +74,14 @@ public abstract class ResultParser { */ public abstract ParsedResult parse(Result theResult); + protected static String getMassagedText(Result result) { + String text = result.getText(); + if (text.startsWith(BYTE_ORDER_MARK)) { + text = text.substring(1); + } + return text; + } + public static ParsedResult parseResult(Result theResult) { for (ResultParser parser : PARSERS) { ParsedResult result = parser.parse(theResult); diff --git a/core/src/com/google/zxing/client/result/SMSMMSResultParser.java b/core/src/com/google/zxing/client/result/SMSMMSResultParser.java index c6346bfe6..2cb71929a 100644 --- a/core/src/com/google/zxing/client/result/SMSMMSResultParser.java +++ b/core/src/com/google/zxing/client/result/SMSMMSResultParser.java @@ -42,7 +42,7 @@ public final class SMSMMSResultParser extends ResultParser { @Override public SMSParsedResult parse(Result result) { - String rawText = result.getText(); + String rawText = getMassagedText(result); if (!(rawText.startsWith("sms:") || rawText.startsWith("SMS:") || rawText.startsWith("mms:") || rawText.startsWith("MMS:"))) { return null; diff --git a/core/src/com/google/zxing/client/result/SMSTOMMSTOResultParser.java b/core/src/com/google/zxing/client/result/SMSTOMMSTOResultParser.java index 55defa493..076056587 100644 --- a/core/src/com/google/zxing/client/result/SMSTOMMSTOResultParser.java +++ b/core/src/com/google/zxing/client/result/SMSTOMMSTOResultParser.java @@ -32,7 +32,7 @@ public final class SMSTOMMSTOResultParser extends ResultParser { @Override public SMSParsedResult parse(Result result) { - String rawText = result.getText(); + String rawText = getMassagedText(result); if (!(rawText.startsWith("smsto:") || rawText.startsWith("SMSTO:") || rawText.startsWith("mmsto:") || rawText.startsWith("MMSTO:"))) { return null; diff --git a/core/src/com/google/zxing/client/result/SMTPResultParser.java b/core/src/com/google/zxing/client/result/SMTPResultParser.java index c39b59c03..14841e451 100644 --- a/core/src/com/google/zxing/client/result/SMTPResultParser.java +++ b/core/src/com/google/zxing/client/result/SMTPResultParser.java @@ -30,7 +30,7 @@ public final class SMTPResultParser extends ResultParser { @Override public EmailAddressParsedResult parse(Result result) { - String rawText = result.getText(); + String rawText = getMassagedText(result); if (!(rawText.startsWith("smtp:") || rawText.startsWith("SMTP:"))) { return null; } diff --git a/core/src/com/google/zxing/client/result/TelResultParser.java b/core/src/com/google/zxing/client/result/TelResultParser.java index 7e822dfb6..e4bca1fba 100644 --- a/core/src/com/google/zxing/client/result/TelResultParser.java +++ b/core/src/com/google/zxing/client/result/TelResultParser.java @@ -27,7 +27,7 @@ public final class TelResultParser extends ResultParser { @Override public TelParsedResult parse(Result result) { - String rawText = result.getText(); + String rawText = getMassagedText(result); if (!rawText.startsWith("tel:") && !rawText.startsWith("TEL:")) { return null; } diff --git a/core/src/com/google/zxing/client/result/URIResultParser.java b/core/src/com/google/zxing/client/result/URIResultParser.java index e6678e249..ebd7d016a 100644 --- a/core/src/com/google/zxing/client/result/URIResultParser.java +++ b/core/src/com/google/zxing/client/result/URIResultParser.java @@ -41,7 +41,7 @@ public final class URIResultParser extends ResultParser { @Override public URIParsedResult parse(Result result) { - String rawText = result.getText(); + String rawText = getMassagedText(result); // We specifically handle the odd "URL" scheme here for simplicity if (rawText.startsWith("URL:")) { rawText = rawText.substring(4); diff --git a/core/src/com/google/zxing/client/result/URLTOResultParser.java b/core/src/com/google/zxing/client/result/URLTOResultParser.java index d1f5a0cdb..fd259007e 100644 --- a/core/src/com/google/zxing/client/result/URLTOResultParser.java +++ b/core/src/com/google/zxing/client/result/URLTOResultParser.java @@ -29,7 +29,7 @@ public final class URLTOResultParser extends ResultParser { @Override public URIParsedResult parse(Result result) { - String rawText = result.getText(); + String rawText = getMassagedText(result); if (!rawText.startsWith("urlto:") && !rawText.startsWith("URLTO:")) { return null; } diff --git a/core/src/com/google/zxing/client/result/VCardResultParser.java b/core/src/com/google/zxing/client/result/VCardResultParser.java index 02e1734cf..7af6184f1 100644 --- a/core/src/com/google/zxing/client/result/VCardResultParser.java +++ b/core/src/com/google/zxing/client/result/VCardResultParser.java @@ -48,7 +48,7 @@ public final class VCardResultParser extends ResultParser { // Although we should insist on the raw text ending with "END:VCARD", there's no reason // to throw out everything else we parsed just because this was omitted. In fact, Eclair // is doing just that, and we can't parse its contacts without this leniency. - String rawText = result.getText(); + String rawText = getMassagedText(result); Matcher m = BEGIN_VCARD.matcher(rawText); if (!m.find() || m.start() != 0) { return null; diff --git a/core/src/com/google/zxing/client/result/VEventResultParser.java b/core/src/com/google/zxing/client/result/VEventResultParser.java index 821a007eb..21f1394c1 100644 --- a/core/src/com/google/zxing/client/result/VEventResultParser.java +++ b/core/src/com/google/zxing/client/result/VEventResultParser.java @@ -30,10 +30,7 @@ public final class VEventResultParser extends ResultParser { @Override public CalendarParsedResult parse(Result result) { - String rawText = result.getText(); - if (rawText == null) { - return null; - } + String rawText = getMassagedText(result); int vEventStart = rawText.indexOf("BEGIN:VEVENT"); if (vEventStart < 0) { return null; diff --git a/core/src/com/google/zxing/client/result/WifiResultParser.java b/core/src/com/google/zxing/client/result/WifiResultParser.java index cfb2df2c7..f70badcf2 100644 --- a/core/src/com/google/zxing/client/result/WifiResultParser.java +++ b/core/src/com/google/zxing/client/result/WifiResultParser.java @@ -31,7 +31,7 @@ public final class WifiResultParser extends ResultParser { @Override public WifiParsedResult parse(Result result) { - String rawText = result.getText(); + String rawText = getMassagedText(result); if (!rawText.startsWith("WIFI:")) { return null; }