From: Mathieu Baudier Date: Thu, 16 Mar 2017 09:55:51 +0000 (+0100) Subject: Make UTF-8 the default charset for LDIF X-Git-Tag: argeo-commons-2.1.65~4 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=404d7629de8f8ba89d6f06587df7cdb7f4df5f62;p=lgpl%2Fargeo-commons.git Make UTF-8 the default charset for LDIF --- diff --git a/org.argeo.enterprise/src/org/argeo/naming/LdifParser.java b/org.argeo.enterprise/src/org/argeo/naming/LdifParser.java index 4aefc9a83..9595b57f0 100644 --- a/org.argeo.enterprise/src/org/argeo/naming/LdifParser.java +++ b/org.argeo.enterprise/src/org/argeo/naming/LdifParser.java @@ -4,6 +4,9 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Base64; import java.util.List; @@ -26,6 +29,7 @@ import org.argeo.osgi.useradmin.UserDirectoryException; /** Basic LDIF parser. */ public class LdifParser { private final static Log log = LogFactory.getLog(LdifParser.class); + private final static Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; protected Attributes addAttributes(SortedMap res, int lineNumber, LdapName currentDn, Attributes currentAttributes) { @@ -47,11 +51,26 @@ public class LdifParser { } } + /** With UTF-8 charset */ public SortedMap read(InputStream in) throws IOException { + try (Reader reader = new InputStreamReader(in, DEFAULT_CHARSET)) { + return read(reader); + } finally { + try { + in.close(); + } catch (IOException e) { + if (log.isTraceEnabled()) + log.error("Cannot close stream", e); + } + } + } + + /** Will close the reader. */ + public SortedMap read(Reader reader) throws IOException { SortedMap res = new TreeMap(); try { List lines = new ArrayList<>(); - try (BufferedReader br = new BufferedReader(new InputStreamReader(in))) { + try (BufferedReader br = new BufferedReader(reader)) { String line; while ((line = br.readLine()) != null) { lines.add(line); @@ -136,7 +155,12 @@ public class LdifParser { currentEntry.append(line); } } finally { - in.close(); + try { + reader.close(); + } catch (IOException e) { + if (log.isTraceEnabled()) + log.error("Cannot close stream", e); + } } return res; } diff --git a/org.argeo.enterprise/src/org/argeo/naming/LdifWriter.java b/org.argeo.enterprise/src/org/argeo/naming/LdifWriter.java index 3a297e5db..892fa885d 100644 --- a/org.argeo.enterprise/src/org/argeo/naming/LdifWriter.java +++ b/org.argeo.enterprise/src/org/argeo/naming/LdifWriter.java @@ -4,6 +4,8 @@ import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.Map; @@ -18,6 +20,7 @@ import org.argeo.osgi.useradmin.UserDirectoryException; /** Basic LDIF writer */ public class LdifWriter { + private final static Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; private final Writer writer; /** Writer must be closed by caller */ @@ -27,7 +30,7 @@ public class LdifWriter { /** Stream must be closed by caller */ public LdifWriter(OutputStream out) { - this(new OutputStreamWriter(out)); + this(new OutputStreamWriter(out, DEFAULT_CHARSET)); } public void writeEntry(LdapName name, Attributes attributes) throws IOException {