Repository: karaf
Updated Branches:
  refs/heads/master e6260bcd5 -> f2b5e47cd


[KARAF-4782] Encoding is lost in ssh print streams

Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/19cf2a22
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/19cf2a22
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/19cf2a22

Branch: refs/heads/master
Commit: 19cf2a229d5c22aa5243863b2a9dd827c1293772
Parents: e6260bc
Author: Guillaume Nodet <gno...@apache.org>
Authored: Tue Oct 18 11:14:05 2016 +0200
Committer: Guillaume Nodet <gno...@apache.org>
Committed: Tue Oct 18 11:16:12 2016 +0200

----------------------------------------------------------------------
 .../org/apache/karaf/shell/ssh/ShellFactoryImpl.java     | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/19cf2a22/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
----------------------------------------------------------------------
diff --git 
a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java 
b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
index f7fdf42..07a63f7 100644
--- a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
+++ b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
@@ -97,10 +97,10 @@ public class ShellFactoryImpl implements Factory<Command> {
             try {
                 final Subject subject = ShellImpl.this.session != null ? 
ShellImpl.this.session
                         
.getAttribute(KarafJaasAuthenticator.SUBJECT_ATTRIBUTE_KEY) : null;
-                final PrintStream pout = out instanceof PrintStream ? 
(PrintStream) out : new PrintStream(out);
-                final PrintStream perr = err instanceof PrintStream ? 
(PrintStream) err : out == err ? pout : new PrintStream(err);
+                String encoding = getEncoding(env);
+                final PrintStream pout = out instanceof PrintStream ? 
(PrintStream) out : new PrintStream(out, false, encoding);
+                final PrintStream perr = err instanceof PrintStream ? 
(PrintStream) err : out == err ? pout : new PrintStream(err, false, encoding);
                 terminal = new SshTerminal(env, in, pout);
-                String encoding = getEncoding();
                 shell = sessionFactory.create(in,
                         pout, perr, terminal, encoding, this::destroy);
                 for (Map.Entry<String, String> e : env.getEnv().entrySet()) {
@@ -130,9 +130,10 @@ public class ShellFactoryImpl implements Factory<Command> {
      *
      * @return The default encoding to use when none is specified.
      */
-    public static String getEncoding() {
+    public static String getEncoding(Environment env) {
         // LC_CTYPE is usually in the form en_US.UTF-8
-        String envEncoding = 
extractEncodingFromCtype(System.getenv("LC_CTYPE"));
+        String ctype = env.getEnv().getOrDefault("LC_TYPE", 
System.getenv("LC_CTYPE"));
+        String envEncoding = extractEncodingFromCtype(ctype);
         if (envEncoding != null) {
             return envEncoding;
         }

Reply via email to