Github user matthiasblaesing commented on the issue:

    https://github.com/apache/incubator-netbeans/pull/70
  
    I think the problem is in rat - with an output file this is what happens:
    
    1. the Report Task creates an FileWriter that writes to the target file and 
wraps a PrintWriter to it ([Report 
Task](http://svn.apache.org/repos/asf/creadur/rat/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java),
 line 196)
    2. this PrintWriter is passed to the core Report report method, where an 
XmlWriter is created ([Report 
Task](http://svn.apache.org/repos/asf/creadur/rat/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java),
 line 268, [Report 
Class](http://svn.apache.org/repos/asf/creadur/rat/trunk/apache-rat-core/src/main/java/org/apache/rat/Report.java),
  line 411)
    3. The XML prolog is written in 
`org.apache.rat.report.xml.writer.impl.base.XmlWriter#startDocument` 
[XmlWriter](http://svn.apache.org/repos/asf/creadur/rat/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/impl/base/XmlWriter.java)
    ```java
                if (reportFile == null) {
                    out = new PrintWriter(
                              new OutputStreamWriter(
                                  new LogOutputStream(this, Project.MSG_INFO)
                                  )
                              );
                } else {
                    out = new PrintWriter(new FileWriter(reportFile));
                }
                createReport(o
    ```
    
    The prolog written in step 3 would be wrong in many cases as it does not 
write an encoding info. This means the encoding of the resulting document must 
be UTF-8. The FileWriter created in step 1 uses the default charset and if that 
is not UTF-8 a broken stream will result.
    
    The Report Task would need to be changed from (line 196):
    
    ```java
    out = new PrintWriter(new FileWriter(reportFile));
    ```
    
    to
    
    ```java
    out = new PrintWriter(new OutputStreamWriter(new 
FileOutputStream(reportFile), Charset.forName("UTF-8")));
    ```


---

Reply via email to