From: AsamK Date: Thu, 26 May 2022 12:49:16 +0000 (+0200) Subject: Use console charset for reading/writing to stdin/out X-Git-Tag: v0.10.7~5 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/e03c48e0ae58c3d37e03dc3eb0e89d44b07d40f9 Use console charset for reading/writing to stdin/out --- diff --git a/src/main/java/org/asamk/signal/App.java b/src/main/java/org/asamk/signal/App.java index f500d818..37f5feec 100644 --- a/src/main/java/org/asamk/signal/App.java +++ b/src/main/java/org/asamk/signal/App.java @@ -46,7 +46,6 @@ import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.io.OutputStreamWriter; -import java.nio.charset.Charset; import static net.sourceforge.argparse4j.DefaultSettings.VERSION_0_9_0_DEFAULT_SETTINGS; @@ -123,7 +122,7 @@ public class App { var outputType = outputTypeInput == null ? command.getSupportedOutputTypes().stream().findFirst().orElse(null) : outputTypeInput; - var writer = new BufferedWriter(new OutputStreamWriter(System.out, Charset.defaultCharset())); + var writer = new BufferedWriter(new OutputStreamWriter(System.out, IOUtils.getConsoleCharset())); var outputWriter = outputType == null ? null : outputType == OutputType.JSON ? new JsonWriterImpl(writer) : new PlainTextWriterImpl(writer); diff --git a/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java b/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java index 8eafa5df..d8322949 100644 --- a/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java +++ b/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java @@ -48,7 +48,8 @@ public class JsonRpcDispatcherCommand implements LocalCommand { m.setIgnoreAttachments(ignoreAttachments); final var jsonOutputWriter = (JsonWriter) outputWriter; - final Supplier lineSupplier = IOUtils.getLineSupplier(new InputStreamReader(System.in)); + final Supplier lineSupplier = IOUtils.getLineSupplier(new InputStreamReader(System.in, + IOUtils.getConsoleCharset())); final var handler = new SignalJsonRpcDispatcherHandler(jsonOutputWriter, lineSupplier, false); handler.handleConnection(m); diff --git a/src/main/java/org/asamk/signal/commands/SendCommand.java b/src/main/java/org/asamk/signal/commands/SendCommand.java index 3873cc27..ae324c84 100644 --- a/src/main/java/org/asamk/signal/commands/SendCommand.java +++ b/src/main/java/org/asamk/signal/commands/SendCommand.java @@ -24,7 +24,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; -import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -120,7 +119,7 @@ public class SendCommand implements JsonRpcLocalCommand { if (readMessageFromStdin || (messageText == null && sticker == null)) { logger.debug("Reading message from stdin..."); try { - messageText = IOUtils.readAll(System.in, Charset.defaultCharset()); + messageText = IOUtils.readAll(System.in, IOUtils.getConsoleCharset()); } catch (IOException e) { throw new UserErrorException("Failed to read message from stdin: " + e.getMessage()); } diff --git a/src/main/java/org/asamk/signal/util/IOUtils.java b/src/main/java/org/asamk/signal/util/IOUtils.java index 25850664..9f220946 100644 --- a/src/main/java/org/asamk/signal/util/IOUtils.java +++ b/src/main/java/org/asamk/signal/util/IOUtils.java @@ -39,6 +39,11 @@ public class IOUtils { private IOUtils() { } + public static Charset getConsoleCharset() { + final var console = System.console(); + return console == null ? Charset.defaultCharset() : console.charset(); + } + public static String readAll(InputStream in, Charset charset) throws IOException { var output = new StringWriter(); var buffer = new byte[4096];