specify encodings as Charset rather than String

This commit is contained in:
Andreas Schildbach 2012-05-19 21:17:52 +02:00
parent 665ee2730d
commit e781abb3c7
23 changed files with 71 additions and 81 deletions

View file

@ -181,7 +181,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
// System.out.println(uri.toString()); // System.out.println(uri.toString());
final CharSequence page = ParserUtils.scrape(uri.toString(), false, null, "UTF-8", null); final CharSequence page = ParserUtils.scrape(uri.toString(), false, null, UTF_8, null);
try try
{ {
@ -2297,7 +2297,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
else else
{ {
uri.append("&type_").append(paramSuffix).append("=").append(locationTypeValue(location)); uri.append("&type_").append(paramSuffix).append("=").append(locationTypeValue(location));
uri.append("&name_").append(paramSuffix).append("=").append(ParserUtils.urlEncode(locationValue(location), "ISO-8859-1")); uri.append("&name_").append(paramSuffix).append("=").append(ParserUtils.urlEncode(locationValue(location), ISO_8859_1));
} }
} }

View file

@ -18,8 +18,9 @@
package de.schildbach.pte; package de.schildbach.pte;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.Charset;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collections; import java.util.Collections;
@ -68,14 +69,13 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
{ {
protected final static String SERVER_PRODUCT = "hafas"; protected final static String SERVER_PRODUCT = "hafas";
private static final String DEFAULT_ENCODING = "ISO-8859-1";
private static final String PROD = "hafas"; private static final String PROD = "hafas";
private final String apiUri; private final String apiUri;
private final int numProductBits; private final int numProductBits;
private final String accessId; private final String accessId;
private final String jsonEncoding; private final Charset jsonEncoding;
private final String xmlMlcResEncoding; private final Charset xmlMlcResEncoding;
private static class Context implements QueryConnectionsContext private static class Context implements QueryConnectionsContext
{ {
@ -101,8 +101,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
} }
} }
public AbstractHafasProvider(final String apiUri, final int numProductBits, final String accessId, final String jsonEncoding, public AbstractHafasProvider(final String apiUri, final int numProductBits, final String accessId, final Charset jsonEncoding,
final String xmlMlcResEncoding) final Charset xmlMlcResEncoding)
{ {
this.apiUri = apiUri; this.apiUri = apiUri;
this.numProductBits = numProductBits; this.numProductBits = numProductBits;
@ -116,8 +116,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
this.apiUri = apiUri; this.apiUri = apiUri;
this.numProductBits = numProductBits; this.numProductBits = numProductBits;
this.accessId = accessId; this.accessId = accessId;
this.jsonEncoding = DEFAULT_ENCODING; this.jsonEncoding = ISO_8859_1;
this.xmlMlcResEncoding = DEFAULT_ENCODING; this.xmlMlcResEncoding = ISO_8859_1;
} }
protected TimeZone timeZone() protected TimeZone timeZone()
@ -243,16 +243,17 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
// System.out.println(ParserUtils.scrape(apiUri, true, wrap(request), null, false)); // System.out.println(ParserUtils.scrape(apiUri, true, wrap(request), null, false));
InputStream is = null; Reader reader = null;
try try
{ {
is = ParserUtils.scrapeInputStream(apiUri, wrap(request), null, 3); reader = new InputStreamReader(ParserUtils.scrapeInputStream(apiUri, wrap(request), null, 3), ISO_8859_1);
final List<Location> results = new ArrayList<Location>(); final List<Location> results = new ArrayList<Location>();
final XmlPullParserFactory factory = XmlPullParserFactory.newInstance(System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null); final XmlPullParserFactory factory = XmlPullParserFactory.newInstance(System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null);
final XmlPullParser pp = factory.newPullParser(); final XmlPullParser pp = factory.newPullParser();
pp.setInput(is, DEFAULT_ENCODING); pp.setInput(reader);
assertResC(pp); assertResC(pp);
XmlPullUtil.enter(pp); XmlPullUtil.enter(pp);
@ -288,8 +289,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
} }
finally finally
{ {
if (is != null) if (reader != null)
is.close(); reader.close();
} }
} }
@ -374,15 +375,15 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
protected final List<Location> xmlLocationList(final String uri) throws IOException protected final List<Location> xmlLocationList(final String uri) throws IOException
{ {
InputStream is = null; Reader reader = null;
try try
{ {
is = ParserUtils.scrapeInputStream(uri); reader = new InputStreamReader(ParserUtils.scrapeInputStream(uri), UTF_8);
final XmlPullParserFactory factory = XmlPullParserFactory.newInstance(System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null); final XmlPullParserFactory factory = XmlPullParserFactory.newInstance(System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null);
final XmlPullParser pp = factory.newPullParser(); final XmlPullParser pp = factory.newPullParser();
pp.setInput(is, "UTF-8"); pp.setInput(reader);
final List<Location> results = new ArrayList<Location>(); final List<Location> results = new ArrayList<Location>();
@ -440,8 +441,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
} }
finally finally
{ {
if (is != null) if (reader != null)
is.close(); reader.close();
} }
} }
@ -454,15 +455,15 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
// ParserUtils.printXml(ParserUtils.scrape(apiUri, true, wrap(request), mlcResEncoding, false)); // ParserUtils.printXml(ParserUtils.scrape(apiUri, true, wrap(request), mlcResEncoding, false));
InputStream is = null; Reader reader = null;
try try
{ {
is = ParserUtils.scrapeInputStream(apiUri, wrap(request), null, 3); reader = new InputStreamReader(ParserUtils.scrapeInputStream(apiUri, wrap(request), null, 3), xmlMlcResEncoding);
final XmlPullParserFactory factory = XmlPullParserFactory.newInstance(System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null); final XmlPullParserFactory factory = XmlPullParserFactory.newInstance(System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null);
final XmlPullParser pp = factory.newPullParser(); final XmlPullParser pp = factory.newPullParser();
pp.setInput(is, xmlMlcResEncoding); pp.setInput(reader);
final List<Location> results = new ArrayList<Location>(); final List<Location> results = new ArrayList<Location>();
@ -523,8 +524,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
} }
finally finally
{ {
if (is != null) if (reader != null)
is.close(); reader.close();
} }
} }
@ -536,8 +537,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
try try
{ {
reader = new StringReplaceReader(new InputStreamReader(ParserUtils.scrapeInputStream(uri), DEFAULT_ENCODING), "Ringbahn ->", reader = new StringReplaceReader(new InputStreamReader(ParserUtils.scrapeInputStream(uri), ISO_8859_1), "Ringbahn ->", "Ringbahn -&gt;");
"Ringbahn -&gt;");
reader.replace("Ringbahn <-", "Ringbahn &lt;-"); reader.replace("Ringbahn <-", "Ringbahn &lt;-");
// System.out.println(uri); // System.out.println(uri);
@ -823,15 +823,15 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
// System.out.println(request); // System.out.println(request);
// ParserUtils.printXml(ParserUtils.scrape(apiUri, true, wrap(request), null, null)); // ParserUtils.printXml(ParserUtils.scrape(apiUri, true, wrap(request), null, null));
InputStream is = null; Reader reader = null;
try try
{ {
is = ParserUtils.scrapeInputStream(apiUri, wrap(request), null, 3); reader = new InputStreamReader(ParserUtils.scrapeInputStream(apiUri, wrap(request), null, 3), ISO_8859_1);
final XmlPullParserFactory factory = XmlPullParserFactory.newInstance(System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null); final XmlPullParserFactory factory = XmlPullParserFactory.newInstance(System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null);
final XmlPullParser pp = factory.newPullParser(); final XmlPullParser pp = factory.newPullParser();
pp.setInput(is, DEFAULT_ENCODING); pp.setInput(reader);
assertResC(pp); assertResC(pp);
final String product = XmlPullUtil.attr(pp, "prod").split(" ")[0]; final String product = XmlPullUtil.attr(pp, "prod").split(" ")[0];
@ -1165,8 +1165,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
} }
finally finally
{ {
if (is != null) if (reader != null)
is.close(); reader.close();
} }
} }

View file

@ -17,6 +17,8 @@
package de.schildbach.pte; package de.schildbach.pte;
import java.nio.charset.Charset;
import de.schildbach.pte.dto.Point; import de.schildbach.pte.dto.Point;
import de.schildbach.pte.dto.Style; import de.schildbach.pte.dto.Style;
@ -25,6 +27,9 @@ import de.schildbach.pte.dto.Style;
*/ */
public abstract class AbstractNetworkProvider implements NetworkProvider public abstract class AbstractNetworkProvider implements NetworkProvider
{ {
protected static final Charset UTF_8 = Charset.forName("UTF-8");
protected static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
public Style lineStyle(final String line) public Style lineStyle(final String line)
{ {
if (line.length() == 0) if (line.length() == 0)

View file

@ -149,11 +149,10 @@ public final class BahnProvider extends AbstractHafasProvider
} }
private static final String AUTOCOMPLETE_URI = API_BASE + "ajax-getstop.exe/dn?getstop=1&REQ0JourneyStopsS0A=255&S=%s?&js=true&"; private static final String AUTOCOMPLETE_URI = API_BASE + "ajax-getstop.exe/dn?getstop=1&REQ0JourneyStopsS0A=255&S=%s?&js=true&";
private static final String ENCODING = "ISO-8859-1";
public List<Location> autocompleteStations(final CharSequence constraint) throws IOException public List<Location> autocompleteStations(final CharSequence constraint) throws IOException
{ {
final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ISO_8859_1));
return jsonGetStops(uri); return jsonGetStops(uri);
} }

View file

@ -169,7 +169,7 @@ public final class BvgProvider extends AbstractHafasProvider
final int parsedId = Integer.parseInt(mOwn.group(1)); final int parsedId = Integer.parseInt(mOwn.group(1));
final int parsedLon = (int) (Float.parseFloat(mOwn.group(2)) * 1E6); final int parsedLon = (int) (Float.parseFloat(mOwn.group(2)) * 1E6);
final int parsedLat = (int) (Float.parseFloat(mOwn.group(3)) * 1E6); final int parsedLat = (int) (Float.parseFloat(mOwn.group(3)) * 1E6);
final String[] parsedPlaceAndName = splitPlaceAndName(ParserUtils.urlDecode(mOwn.group(4), "ISO-8859-1")); final String[] parsedPlaceAndName = splitPlaceAndName(ParserUtils.urlDecode(mOwn.group(4), ISO_8859_1));
stations.add(new Location(LocationType.STATION, parsedId, parsedLat, parsedLon, parsedPlaceAndName[0], parsedPlaceAndName[1])); stations.add(new Location(LocationType.STATION, parsedId, parsedLat, parsedLon, parsedPlaceAndName[0], parsedPlaceAndName[1]));
} }
@ -454,8 +454,6 @@ public final class BvgProvider extends AbstractHafasProvider
return xmlMLcReq(constraint); return xmlMLcReq(constraint);
} }
private static final String URL_ENCODING = "ISO-8859-1";
private String connectionsQueryUri(final Location from, final Location via, final Location to, final Date date, final boolean dep, private String connectionsQueryUri(final Location from, final Location via, final Location to, final Date date, final boolean dep,
final String products) final String products)
{ {
@ -468,8 +466,8 @@ public final class BvgProvider extends AbstractHafasProvider
uri.append("?start=Suchen"); uri.append("?start=Suchen");
uri.append("&REQ0JourneyStopsS0ID=").append(ParserUtils.urlEncode(locationId(from), URL_ENCODING)); uri.append("&REQ0JourneyStopsS0ID=").append(ParserUtils.urlEncode(locationId(from), ISO_8859_1));
uri.append("&REQ0JourneyStopsZ0ID=").append(ParserUtils.urlEncode(locationId(to), URL_ENCODING)); uri.append("&REQ0JourneyStopsZ0ID=").append(ParserUtils.urlEncode(locationId(to), ISO_8859_1));
if (via != null) if (via != null)
{ {
@ -487,11 +485,11 @@ public final class BvgProvider extends AbstractHafasProvider
uri.append("&REQ0JourneyStops1.0Y=").append(via.lat); uri.append("&REQ0JourneyStops1.0Y=").append(via.lat);
if (via.name == null) if (via.name == null)
uri.append("&REQ0JourneyStops1.0O=").append( uri.append("&REQ0JourneyStops1.0O=").append(
ParserUtils.urlEncode(String.format(Locale.ENGLISH, "%.6f, %.6f", via.lat / 1E6, via.lon / 1E6), URL_ENCODING)); ParserUtils.urlEncode(String.format(Locale.ENGLISH, "%.6f, %.6f", via.lat / 1E6, via.lon / 1E6), ISO_8859_1));
} }
else if (via.name != null) else if (via.name != null)
{ {
uri.append("&REQ0JourneyStops1.0G=").append(ParserUtils.urlEncode(via.name, URL_ENCODING)); uri.append("&REQ0JourneyStops1.0G=").append(ParserUtils.urlEncode(via.name, ISO_8859_1));
if (via.type != LocationType.ANY) if (via.type != LocationType.ANY)
uri.append('!'); uri.append('!');
} }

View file

@ -154,11 +154,10 @@ public class DsbProvider extends AbstractHafasProvider
} }
private static final String AUTOCOMPLETE_URI = "http://xmlopen.rejseplanen.dk/bin/rest.exe/location.name?input=%s"; private static final String AUTOCOMPLETE_URI = "http://xmlopen.rejseplanen.dk/bin/rest.exe/location.name?input=%s";
private static final String ENCODING = "ISO-8859-1";
public List<Location> autocompleteStations(final CharSequence constraint) throws IOException public List<Location> autocompleteStations(final CharSequence constraint) throws IOException
{ {
final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ISO_8859_1));
return xmlLocationList(uri); return xmlLocationList(uri);
} }

View file

@ -156,11 +156,10 @@ public class NriProvider extends AbstractHafasProvider
private static final String AUTOCOMPLETE_URI = API_BASE private static final String AUTOCOMPLETE_URI = API_BASE
+ "ajax-getstop.exe/ony?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=255&REQ0JourneyStopsS0B=5&REQ0JourneyStopsB=12&getstop=1&noSession=yes&REQ0JourneyStopsS0G=%s?&js=true&"; + "ajax-getstop.exe/ony?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=255&REQ0JourneyStopsS0B=5&REQ0JourneyStopsB=12&getstop=1&noSession=yes&REQ0JourneyStopsS0G=%s?&js=true&";
private static final String ENCODING = "ISO-8859-1";
public List<Location> autocompleteStations(final CharSequence constraint) throws IOException public List<Location> autocompleteStations(final CharSequence constraint) throws IOException
{ {
final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ISO_8859_1));
return jsonGetStops(uri); return jsonGetStops(uri);
} }

View file

@ -35,7 +35,7 @@ public class NvvProvider extends AbstractHafasProvider
public NvvProvider() public NvvProvider()
{ {
super(API_BASE + "query.exe/dn", 17, null, "UTF-8", "UTF-8"); super(API_BASE + "query.exe/dn", 17, null, UTF_8, UTF_8);
} }
public NetworkId id() public NetworkId id()

View file

@ -35,7 +35,6 @@ public class OebbProvider extends AbstractHafasProvider
{ {
public static final NetworkId NETWORK_ID = NetworkId.OEBB; public static final NetworkId NETWORK_ID = NetworkId.OEBB;
private static final String API_BASE = "http://fahrplan.oebb.at/bin/"; private static final String API_BASE = "http://fahrplan.oebb.at/bin/";
private static final String URL_ENCODING = "ISO-8859-1";
public OebbProvider() public OebbProvider()
{ {
@ -186,7 +185,7 @@ public class OebbProvider extends AbstractHafasProvider
public List<Location> autocompleteStations(final CharSequence constraint) throws IOException public List<Location> autocompleteStations(final CharSequence constraint) throws IOException
{ {
final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), URL_ENCODING)); final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ISO_8859_1));
return jsonGetStops(uri); return jsonGetStops(uri);
} }

View file

@ -38,7 +38,7 @@ public class PlProvider extends AbstractHafasProvider
public PlProvider() public PlProvider()
{ {
super(API_BASE + "query.exe/pn", 7, null, null, "UTF-8"); super(API_BASE + "query.exe/pn", 7, null, null, UTF_8);
} }
public NetworkId id() public NetworkId id()

View file

@ -48,7 +48,7 @@ public class RmvProvider extends AbstractHafasProvider
public RmvProvider() public RmvProvider()
{ {
super(API_BASE + "query.exe/dn", 16, null, "UTF-8", null); super(API_BASE + "query.exe/dn", 16, null, UTF_8, null);
} }
public NetworkId id() public NetworkId id()
@ -298,11 +298,10 @@ public class RmvProvider extends AbstractHafasProvider
} }
private static final String AUTOCOMPLETE_URI = API_BASE + "ajax-getstop.exe/dn?getstop=1&REQ0JourneyStopsS0A=255&S=%s?&js=true&"; private static final String AUTOCOMPLETE_URI = API_BASE + "ajax-getstop.exe/dn?getstop=1&REQ0JourneyStopsS0A=255&S=%s?&js=true&";
private static final String ENCODING = "ISO-8859-1";
public List<Location> autocompleteStations(final CharSequence constraint) throws IOException public List<Location> autocompleteStations(final CharSequence constraint) throws IOException
{ {
final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ISO_8859_1));
return jsonGetStops(uri); return jsonGetStops(uri);
} }

View file

@ -36,7 +36,7 @@ public class RtProvider extends AbstractHafasProvider
public RtProvider() public RtProvider()
{ {
super(API_BASE + "query.exe/dn", 10, null, "UTF-8", null); super(API_BASE + "query.exe/dn", 10, null, UTF_8, null);
} }
public NetworkId id() public NetworkId id()
@ -148,11 +148,10 @@ public class RtProvider extends AbstractHafasProvider
} }
private static final String AUTOCOMPLETE_URI = API_BASE + "ajax-getstop.exe/dn?getstop=1&REQ0JourneyStopsS0A=255&S=%s?&js=true&"; private static final String AUTOCOMPLETE_URI = API_BASE + "ajax-getstop.exe/dn?getstop=1&REQ0JourneyStopsS0A=255&S=%s?&js=true&";
private static final String ENCODING = "ISO-8859-1";
public List<Location> autocompleteStations(final CharSequence constraint) throws IOException public List<Location> autocompleteStations(final CharSequence constraint) throws IOException
{ {
final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ISO_8859_1));
return jsonGetStops(uri); return jsonGetStops(uri);
} }

View file

@ -143,11 +143,10 @@ public class SbbProvider extends AbstractHafasProvider
} }
private static final String AUTOCOMPLETE_URI = API_BASE + "ajax-getstop.exe/dn?getstop=1&REQ0JourneyStopsS0A=255&S=%s?&js=true&"; private static final String AUTOCOMPLETE_URI = API_BASE + "ajax-getstop.exe/dn?getstop=1&REQ0JourneyStopsS0A=255&S=%s?&js=true&";
private static final String ENCODING = "ISO-8859-1";
public List<Location> autocompleteStations(final CharSequence constraint) throws IOException public List<Location> autocompleteStations(final CharSequence constraint) throws IOException
{ {
final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ISO_8859_1));
return jsonGetStops(uri); return jsonGetStops(uri);
} }

View file

@ -39,7 +39,7 @@ public class SeProvider extends AbstractHafasProvider
public SeProvider() public SeProvider()
{ {
super(API_BASE + "query.exe/sn", 14, null, "UTF-8", null); super(API_BASE + "query.exe/sn", 14, null, UTF_8, null);
} }
public NetworkId id() public NetworkId id()
@ -191,11 +191,10 @@ public class SeProvider extends AbstractHafasProvider
private static final String AUTOCOMPLETE_URI = API_BASE private static final String AUTOCOMPLETE_URI = API_BASE
+ "ajax-getstop.exe/sny?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=7&getstop=1&noSession=yes&REQ0JourneyStopsB=12&REQ0JourneyStopsS0G=&S=%s"; + "ajax-getstop.exe/sny?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=7&getstop=1&noSession=yes&REQ0JourneyStopsB=12&REQ0JourneyStopsS0G=&S=%s";
private static final String ENCODING = "ISO-8859-1";
public List<Location> autocompleteStations(final CharSequence constraint) throws IOException public List<Location> autocompleteStations(final CharSequence constraint) throws IOException
{ {
final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ISO_8859_1));
return jsonGetStops(uri); return jsonGetStops(uri);
} }

View file

@ -289,11 +289,10 @@ public class SeptaProvider extends AbstractHafasProvider
private static final String AUTOCOMPLETE_URI = API_BASE private static final String AUTOCOMPLETE_URI = API_BASE
+ "ajax-getstop.exe/dny?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=255&REQ0JourneyStopsB=12&S=%s?&js=true&"; + "ajax-getstop.exe/dny?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=255&REQ0JourneyStopsB=12&S=%s?&js=true&";
private static final String ENCODING = "ISO-8859-1";
public List<Location> autocompleteStations(final CharSequence constraint) throws IOException public List<Location> autocompleteStations(final CharSequence constraint) throws IOException
{ {
final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ISO_8859_1));
return jsonGetStops(uri); return jsonGetStops(uri);
} }

View file

@ -50,7 +50,7 @@ public class ShProvider extends AbstractHafasProvider
public ShProvider() public ShProvider()
{ {
super(API_BASE + "query.exe/dn", 10, null, null, "UTF-8"); super(API_BASE + "query.exe/dn", 10, null, null, UTF_8);
} }
public NetworkId id() public NetworkId id()

View file

@ -134,11 +134,10 @@ public class SncbProvider extends AbstractHafasProvider
private static final String AUTOCOMPLETE_URI = API_BASE private static final String AUTOCOMPLETE_URI = API_BASE
+ "ajax-getstop.exe/nny?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=255&REQ0JourneyStopsB=12&S=%s?&js=true&"; + "ajax-getstop.exe/nny?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=255&REQ0JourneyStopsB=12&S=%s?&js=true&";
private static final String ENCODING = "ISO-8859-1";
public List<Location> autocompleteStations(final CharSequence constraint) throws IOException public List<Location> autocompleteStations(final CharSequence constraint) throws IOException
{ {
final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ISO_8859_1));
return jsonGetStops(uri); return jsonGetStops(uri);
} }

View file

@ -158,11 +158,10 @@ public class StockholmProvider extends AbstractHafasProvider
private static final String AUTOCOMPLETE_URI = API_BASE private static final String AUTOCOMPLETE_URI = API_BASE
+ "ajax-getstop.exe/sny?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=7&getstop=1&noSession=yes&REQ0JourneyStopsB=12&REQ0JourneyStopsS0G=&S=%s"; + "ajax-getstop.exe/sny?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=7&getstop=1&noSession=yes&REQ0JourneyStopsB=12&REQ0JourneyStopsS0G=&S=%s";
private static final String ENCODING = "ISO-8859-1";
public List<Location> autocompleteStations(final CharSequence constraint) throws IOException public List<Location> autocompleteStations(final CharSequence constraint) throws IOException
{ {
final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ISO_8859_1));
return jsonGetStops(uri); return jsonGetStops(uri);
} }

View file

@ -164,11 +164,10 @@ public class VbbProvider extends AbstractHafasProvider
} }
private static final String AUTOCOMPLETE_URI = API_BASE + "ajax-getstop.exe/dn?getstop=1&REQ0JourneyStopsS0A=255&S=%s?&js=true&"; private static final String AUTOCOMPLETE_URI = API_BASE + "ajax-getstop.exe/dn?getstop=1&REQ0JourneyStopsS0A=255&S=%s?&js=true&";
private static final String ENCODING = "ISO-8859-1";
public List<Location> autocompleteStations(final CharSequence constraint) throws IOException public List<Location> autocompleteStations(final CharSequence constraint) throws IOException
{ {
final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ISO_8859_1));
return jsonGetStops(uri); return jsonGetStops(uri);
} }

View file

@ -149,11 +149,10 @@ public class VbnProvider extends AbstractHafasProvider
private static final String AUTOCOMPLETE_URI = API_BASE private static final String AUTOCOMPLETE_URI = API_BASE
+ "ajax-getstop.exe/dny?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=255&REQ0JourneyStopsS0B=5&REQ0JourneyStopsB=12&getstop=1&noSession=yes&REQ0JourneyStopsS0G=%s?&js=true&"; + "ajax-getstop.exe/dny?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=255&REQ0JourneyStopsS0B=5&REQ0JourneyStopsB=12&getstop=1&noSession=yes&REQ0JourneyStopsS0G=%s?&js=true&";
private static final String ENCODING = "ISO-8859-1";
public List<Location> autocompleteStations(final CharSequence constraint) throws IOException public List<Location> autocompleteStations(final CharSequence constraint) throws IOException
{ {
final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ISO_8859_1));
return jsonGetStops(uri); return jsonGetStops(uri);
} }

View file

@ -300,11 +300,10 @@ public class VgsProvider extends AbstractHafasProvider
private static final String AUTOCOMPLETE_URI = API_BASE private static final String AUTOCOMPLETE_URI = API_BASE
+ "ajax-getstop.exe/eny?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=1&getstop=1&noSession=yes&REQ0JourneyStopsB=12&REQ0JourneyStopsS0G=%s?&js=true&"; + "ajax-getstop.exe/eny?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=1&getstop=1&noSession=yes&REQ0JourneyStopsB=12&REQ0JourneyStopsS0G=%s?&js=true&";
private static final String ENCODING = "ISO-8859-1";
public List<Location> autocompleteStations(final CharSequence constraint) throws IOException public List<Location> autocompleteStations(final CharSequence constraint) throws IOException
{ {
final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ISO_8859_1));
return jsonGetStops(uri); return jsonGetStops(uri);
} }

View file

@ -37,7 +37,7 @@ public class ZvvProvider extends AbstractHafasProvider
public ZvvProvider() public ZvvProvider()
{ {
super(API_BASE + "query.exe/dn", 10, null, "UTF-8", "UTF-8"); super(API_BASE + "query.exe/dn", 10, null, UTF_8, UTF_8);
} }
public NetworkId id() public NetworkId id()

View file

@ -29,6 +29,7 @@ import java.net.SocketTimeoutException;
import java.net.URL; import java.net.URL;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
@ -50,7 +51,7 @@ public final class ParserUtils
private static final int SCRAPE_INITIAL_CAPACITY = 4096; private static final int SCRAPE_INITIAL_CAPACITY = 4096;
private static final int SCRAPE_CONNECT_TIMEOUT = 5000; private static final int SCRAPE_CONNECT_TIMEOUT = 5000;
private static final int SCRAPE_READ_TIMEOUT = 15000; private static final int SCRAPE_READ_TIMEOUT = 15000;
private static final String SCRAPE_DEFAULT_ENCODING = "ISO-8859-1"; private static final Charset SCRAPE_DEFAULT_ENCODING = Charset.forName("ISO-8859-1");
private static final int SCRAPE_PAGE_EMPTY_THRESHOLD = 2; private static final int SCRAPE_PAGE_EMPTY_THRESHOLD = 2;
private static String stateCookie; private static String stateCookie;
@ -65,13 +66,13 @@ public final class ParserUtils
return scrape(url, false, null, null, null); return scrape(url, false, null, null, null);
} }
public static final CharSequence scrape(final String url, final boolean isPost, final String request, String encoding, public static final CharSequence scrape(final String url, final boolean isPost, final String request, Charset encoding,
final String sessionCookieName) throws IOException final String sessionCookieName) throws IOException
{ {
return scrape(url, isPost, request, encoding, sessionCookieName, 3); return scrape(url, isPost, request, encoding, sessionCookieName, 3);
} }
public static final CharSequence scrape(final String urlStr, final boolean isPost, final String request, String encoding, public static final CharSequence scrape(final String urlStr, final boolean isPost, final String request, Charset encoding,
final String sessionCookieName, int tries) throws IOException final String sessionCookieName, int tries) throws IOException
{ {
if (encoding == null) if (encoding == null)
@ -432,11 +433,11 @@ public final class ParserUtils
} }
} }
public static String urlEncode(final String str, final String enc) public static String urlEncode(final String str, final Charset encoding)
{ {
try try
{ {
return URLEncoder.encode(str, enc); return URLEncoder.encode(str, encoding.name());
} }
catch (final UnsupportedEncodingException x) catch (final UnsupportedEncodingException x)
{ {
@ -444,11 +445,11 @@ public final class ParserUtils
} }
} }
public static String urlDecode(final String str, final String enc) public static String urlDecode(final String str, final Charset encoding)
{ {
try try
{ {
return URLDecoder.decode(str, enc); return URLDecoder.decode(str, encoding.name());
} }
catch (final UnsupportedEncodingException x) catch (final UnsupportedEncodingException x)
{ {