[XDoclet-JIRA] Created: (XDT-1671) Can't get correct content when the encoding of template is UTF-8, GBK

"nowind (JIRA)" <[email protected]> Sun, 12 Nov 2006 22:47:31 -0600 (CST)
Newsgroups gmane.comp.java.xdoclet.devel
Message-ID <127270964.1163393251243.JavaMail.j2ee@atlassian01.managed.contegix.com>
Can't get correct content when the encoding of template is UTF-8,GBK
--------------------------------------------------------------------

         Key: XDT-1671
         URL: http://opensource.atlassian.com/projects/xdoclet/browse/XDT-1671
     Project: XDoclet
        Type: Bug

  Components: XDoclet Module  
    Versions: 1.2.3    
 Environment: windows xp, jdk5.0, eclipse 3.2
    Reporter: nowind
 Assigned to: xdoclet-devel (Use for new issues) 


the ant script is:
<target name="test">
        <taskdef name="doclet" classname="xdoclet.DocletTask" classpathref="path.libAndClasses" />
        <doclet destdir="${dir.generated}/test" verbose="true">
               <fileset dir="${dir.domain}">
                        <include name="domain/*.java" />
                </fileset>
                <template templateFile="resources/test.xdt" destinationFile="{0}.java" subTaskName="Create Controller file(s).." />
        </doclet>
</target>

When the encoding of the template file is UTF-8(or other Chinese encoding like GBK), and it contains some Chinese Characters, the files it generated will have some strange and unidentifiable characters. But the unidentifiable characters are just a little part of the Chinese characters, most are correct.

the bug is in the function "getURLContent " of FileManager class.
 try {
            InputStream is = null;

            if ("file".equals(url.getProtocol())) {
                is = new java.io.FileInputStream(url.getFile());
            }
            else {
                is = url.openStream();
            }

            ByteArrayOutputStream baos = new ByteArrayOutputStream(is.available());

            pump(is, baos);

            content = new String(baos.toByteArray());
            urlCache.put(url, content);

            return content;
        }

we must specify the encoding of the url content. for example, if the encoding is UTF-8, we need to use:

new InputStreamReader(is,"UTF-8") 

to get the correct content.

and, we must specify the encoding to get the content BEFORE we use the function "pump" to copy the content to a outstream. If we copy them  before we specify the encoding, we will get some unidentifiable characters.

and, we need to add getDocEncoding and setDocEncoding method to TemplateSubTask, and specify it in ant script.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://opensource.atlassian.com/projects/xdoclet/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642