The program uses logger (logback) to write a text. The text contains diacritical letters. Output is correct when the program runs on Eclipse (console). The project and all configuration based on UTF-8.
After create jar file and running it on Windows console (cmd), output has additional letters and lines (when the line contains diacritical letters). Windows console configuration UTF-8 (chcp 65001) and font Lucida Console.
Why the additional lines appears?
/writeStdout/src/main/java/com/writeStdout/WriteStdout.java
package com.writeStdout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class WriteStdout {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(WriteStdout.class);
logger.debug("This is a text without diacritical letters.");
logger.debug("This is a text with diacritical letters żółć żółć.");
logger.debug("This is a text without diacritical letters.");
logger.debug(
"This is a text with diacritical letters ślężańską źródłowość.");
logger.debug("This is a text without diacritical letters.");
}
}
Eclipse Console (proper output):
This is a text without diacritical letters.
This is a text with diacritical letters żółć żółć.
This is a text without diacritical letters.
This is a text with diacritical letters ślężańską źródłowość.
This is a text without diacritical letters.
Windows Console (additional lines and letters):
This is a text without diacritical letters.
This is a text with diacritical letters żółć żółć.
�łć.
This is a text without diacritical letters.
This is a text with diacritical letters ślężańską źródłowość.
owość.
This is a text without diacritical letters.
/writeStdout/src/main/resources/logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>%msg%n
</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
/writeStdout/pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.writeStdout</groupId>
<artifactId>writeStdout</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>writeStdout</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<classpathPrefix>lib</classpathPrefix>
<addClasspath>true</addClasspath>
<mainClass>com.writeStdout.WriteStdout</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
Now I have Java 1.8.0_144
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
Writing output to file
java -jar target\writeStdout-0.0.1-SNAPSHOT.jar > c:\logs\d.log
generate correct file
5468 6973 2069 7320 6120 7465 7874 2077
6974 686f 7574 2064 6961 6372 6974 6963
616c 206c 6574 7465 7273 2e0d 0a54 6869
7320 6973 2061 2074 6578 7420 7769 7468
2064 6961 6372 6974 6963 616c 206c 6574
7465 7273 20c5 bcc3 b3c5 82c4 8720 c5bc
c3b3 c582 c487 2e0d 0a54 6869 7320 6973
2061 2074 6578 7420 7769 7468 6f75 7420
6469 6163 7269 7469 6361 6c20 6c65 7474
6572 732e 0d0a 5468 6973 2069 7320 6120
7465 7874 2077 6974 6820 6469 6163 7269
7469 6361 6c20 6c65 7474 6572 7320 c59b
6cc4 99c5 bc61 c584 736b c485 20c5 ba72
c3b3 64c5 826f 776f c59b c487 2e0d 0a54
6869 7320 6973 2061 2074 6578 7420 7769
7468 6f75 7420 6469 6163 7269 7469 6361
6c20 6c65 7474 6572 732e 0d0a
This is a text without diacritical letters.
This is a text with diacritical letters żółć żółć.
This is a text without diacritical letters.
This is a text with diacritical letters ślężańską źródłowość.
This is a text without diacritical letters.
Command:
type c:\logs\d.log
shows correct content.
Writing text to file (logback level):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="DEV_HOME" value="c:/logs" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>%msg%n
</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${DEV_HOME}/debug.log</file>
<append>true</append>
<immediateFlush>true</immediateFlush>
<encoder>
<charset>UTF-8</charset>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
generate correct file.
I've created a github project for it:
https://github.com/riskop/logback_diacritical.git
It works for me as expected:
C:\Users\riskop\Documents\test\logback_diacritical\target>ver
Microsoft Windows [Version 10.0.14393]
C:\Users\riskop\Documents\test\logback_diacritical\target>java -version
openjdk version "1.8.0_40"
OpenJDK Runtime Environment (build 1.8.0_40-b25)
OpenJDK Client VM (build 25.40-b25, mixed mode)
C:\Users\riskop\Documents\test\logback_diacritical\target>chcp
Active code page: 65001
C:\Users\riskop\Documents\test\logback_diacritical\target>java -jar
writeStdout-0.0.1-SNAPSHOT.jar
This is a text without diacritical letters.
This is a text with diacritical letters żółć żółć.
This is a text without diacritical letters.
This is a text with diacritical letters ślężańską źródłowość.
This is a text without diacritical letters.
What is your java / windows version?
Ps.: If I direct the output to file, I get this:
00000000 54 68 69 73 20 69 73 20 61 20 74 65 78 74 20 77 This is a text w...
00000010 69 74 68 6F 75 74 20 64 69 61 63 72 69 74 69 63 ithout diacritic...
00000020 61 6C 20 6C 65 74 74 65 72 73 2E 0D 0A 54 68 69 al letters...Thi...
00000030 73 20 69 73 20 61 20 74 65 78 74 20 77 69 74 68 s is a text with...
00000040 20 64 69 61 63 72 69 74 69 63 61 6C 20 6C 65 74 diacritical let...
00000050 74 65 72 73 20 C5 BC C3 B3 C5 82 C4 87 20 C5 BC ters ż ó ł ć ż....
00000060 C3 B3 C5 82 C4 87 2E 0D 0A 54 68 69 73 20 69 73 ó ł ć ...This is...
00000070 20 61 20 74 65 78 74 20 77 69 74 68 6F 75 74 20 a text without....
00000080 64 69 61 63 72 69 74 69 63 61 6C 20 6C 65 74 74 diacritical lett...
00000090 65 72 73 2E 0D 0A 54 68 69 73 20 69 73 20 61 20 ers...This is a....
000000A0 74 65 78 74 20 77 69 74 68 20 64 69 61 63 72 69 text with diacri...
000000B0 74 69 63 61 6C 20 6C 65 74 74 65 72 73 20 C5 9B tical letters ś....
000000C0 6C C4 99 C5 BC 61 C5 84 73 6B C4 85 20 C5 BA 72 lę ż ań ską ź r...
000000D0 C3 B3 64 C5 82 6F 77 6F C5 9B C4 87 2E 0D 0A 54 ó dł owoś ć ...T...
000000E0 68 69 73 20 69 73 20 61 20 74 65 78 74 20 77 69 his is a text wi...
000000F0 74 68 6F 75 74 20 64 69 61 63 72 69 74 69 63 61 thout diacritica...
00000100 6C 20 6C 65 74 74 65 72 73 2E 0D 0A l letters..........
What is your output in this form?