From 253144d0d5e2c704431b8e1de8342fbc734a3086 Mon Sep 17 00:00:00 2001 From: Jan Klimke Date: Thu, 18 Dec 2014 14:12:50 +0100 Subject: [PATCH] * switched sql parser to use a UTF-8 input stream which also handles multibyte characters --- src/com/activeandroid/util/SqlParser.java | 10 +++++++--- src/com/activeandroid/util/Tokenizer.java | 5 +++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/com/activeandroid/util/SqlParser.java b/src/com/activeandroid/util/SqlParser.java index f9531b7c8..7f17657ee 100644 --- a/src/com/activeandroid/util/SqlParser.java +++ b/src/com/activeandroid/util/SqlParser.java @@ -18,8 +18,10 @@ */ import java.io.BufferedInputStream; +import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; @@ -34,11 +36,13 @@ public class SqlParser { public static List parse(final InputStream stream) throws IOException { final BufferedInputStream buffer = new BufferedInputStream(stream); + final BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8")); final List commands = new ArrayList(); + final StringBuffer sb = new StringBuffer(); try { - final Tokenizer tokenizer = new Tokenizer(buffer); + final Tokenizer tokenizer = new Tokenizer(reader); int state = STATE_NONE; while (tokenizer.hasNext()) { @@ -100,11 +104,11 @@ public static List parse(final InputStream stream) throws IOException { return commands; } - private static boolean isNewLine(final char c) { + private static boolean isNewLine(final int c) { return c == '\r' || c == '\n'; } - private static boolean isWhitespace(final char c) { + private static boolean isWhitespace(final int c) { return c == '\r' || c == '\n' || c == '\t' || c == ' '; } } diff --git a/src/com/activeandroid/util/Tokenizer.java b/src/com/activeandroid/util/Tokenizer.java index 8ae34da32..f337caf94 100644 --- a/src/com/activeandroid/util/Tokenizer.java +++ b/src/com/activeandroid/util/Tokenizer.java @@ -19,16 +19,17 @@ import java.io.IOException; import java.io.InputStream; +import java.io.Reader; public class Tokenizer { - private final InputStream mStream; + private final Reader mStream; private boolean mIsNext; private int mCurrent; - public Tokenizer(final InputStream in) { + public Tokenizer(final Reader in) { this.mStream = in; }