This blog is about Java (advanced Java topics like Reflection, Byte Code transformation, Code Generation), Maven, Web technologies, Raspberry Pi and IT in general.

Sonntag, 17. Januar 2016

How to set the encoding of a Powershell console window

I created some Unix like Java console programs. One program reads the stdin, writes to the stdout and then the next program reads the output and processes it. This worked very well with Cygwin or a Unix shell. The whole thing looks like this:

> java -jar prog1.jar | java -jar prog2.jar

 The Java code is quite simple a well:

Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
  String line = scanner.nextLine();
  System.out.println(doSomething(line));
}

My problem was that this example broke special characters if I did the same thing in the Windows Powershell. The reason is that a Powershell console window doesn't use the default system encoding, but some strange encoding. In my case it's IBM850. However my default system encoding is window-1252. My Java programs expected windows-1252 and therefore the encoding of special chars was broken. Why the hell uses a Powershell window IBM850? I have no idea. But I cost my several hours to figure it out and to figure out how to change the encoding. To change the encoding to the default system encoding you need to run this three commands:

$OutputEncoding = [system.text.encoding]::GetEncoding([System.Text.Encoding]::Default.CodePage)
[console]::InputEncoding = [system.text.encoding]::GetEncoding([System.Text.Encoding]::Default.CodePage)
[console]::OutputEncoding = [system.text.encoding]::GetEncoding([System.Text.Encoding]::Default.CodePage)

Again i have no idea why you need to set the encoding three times. After this point I just did it and I was happy that it worked.

1 Kommentar:

  1. They inspire them to keep coming back to your on-line on line casino platform by providing increasing rewards for developing a long-term relationship. Such programs are a very important a part 더온카지노 of} many on-line casinos’ retention methods. Gambling for actual money on-line in the United States is typically protected. In our review, each website we have recommended is licensed and controlled by a respected gaming authority and accepts bets from U.S. residents. Moreover, every website employs safety procedures to display screen potential consumers and safeguard any monetary or personal info they provide.

    AntwortenLöschen