Hmm..yes, I think I see it now. Users must use a same encoding for all template files and tell it in an input.encoding attribute. Failing to do so gives an incorrent bytesToChar conversion on some template files.
This is Velocity loader limitation, it should use Reader* instead of InputStream* interface. All problems would go away if Velocity used UnicodeReader implementation.
> From: mailmur <
mailmur@...>
> Subject: Re: AW: AW: getEncodingFromStream from UnicodeInputStream
> To: "Velocity Users List" <
user@...>
> Date: Wednesday, July 22, 2009, 12:44 AM
>
> Here is an old v1.6 example but principal applies to a
> current release.
>
http://koti.mbnet.fi/akini/java/unicodereader/>
http://koti.mbnet.fi/akini/java/unicodereader/UnicodeLoaderForVelocity.zip>
> resource.loader = file
> file.resource.loader.class =
> org.apache.velocity.runtime.resource.loader.FileResourceLoader
> file.resource.loader.unicode = true
>
> Yes, FileResourceloader with "unicode=true" attribute can
> handle all utf* and ansi encoding transparently. Encoding is
> autorecognized by BOM marker or fallback to a legacy ansi.
> We don't need or should tell a read encoding, its an
> internal bytesToChars issue handled by unicodeinputstream.
> ...
> Template template =
> Velocity.getTemplate(srcFile);
> template.merge(context, out);
> ...
>
> You should not use Velocity.getTemplate(name, encoding)
> method if used FileResourceLoader with unicode=true
> attribute. It voids all the wise purpose of
> FileResourceLoader unicode.
>
>
> --- On Tue, 7/21/09,
Johann.Weber@...
> <
Johann.Weber@...>
> wrote:
>
> > From:
Johann.Weber@...
> <
Johann.Weber@...>
> > Subject: AW: AW: getEncodingFromStream from
> UnicodeInputStream
> > To:
user@...
> > Date: Tuesday, July 21, 2009, 10:14 AM
> > The UnicodeInputStream class is used
> > to load files with a BOM correctly. It knows the file
> > encoding but I can't use it.
> > If it is the case that I have to load files with a
> > different encoding (e.g. UTF-8 and UTF-16), I won't be
> able
> > to handle such a situation, because I must set the
> > input.encoding property or pass it to the getTemplate
> > method. Otherwise, the default encoding will be taken
> for
> > all files.
> >
> >
> > -----Ursprüngliche Nachricht-----
> > Von: mailmur [mailto:
mailmur@...]
> >
> > Gesendet: Dienstag, 21. Juli 2009 08:22
> > An: Velocity Users List
> > Betreff: Re: AW: getEncodingFromStream from
> > UnicodeInputStream
> >
> >
> > I think you misunderstood a fundametal reason of the
> > UnicodeInputStream class. It is to use so that
> template
> > loaders don't need to tell an encoding so all is
> fully
> > transparent.
> >
> > getTemplate(name, encoding) method is an old legacy
> method
> > where we as a user must know the encoding beforehand.
> This
> > is very very unfortunate issue, something we should
> not
> > worry about in the first place.
> >
> > Its only FileResourceLoader class using the
> > UnicodeInputStream class. All other loaders don't use
> it,
> > this is a lack of Velocity loader implementation. If
> all
> > loaders was to use it then we just would use
> > getTemplate(name) and all is fine.
> >
> > FileResourceLoader does not use it as a default use,
> you
> > must tell "unicode=true" in a velocity.properties
> > configuration. Then you can forget the file encoding,
> ansi
> > and utf* templates are loaded properly.
> >
> >
http://svn.apache.org/repos/asf/velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/FileResourceLoader.java> >
> >
> > --- On Tue, 7/14/09,
Johann.Weber@...
> > <
Johann.Weber@...>
> > wrote:
> >
> > > From:
Johann.Weber@...
> > <
Johann.Weber@...>
> > > Subject: AW: getEncodingFromStream from
> > UnicodeInputStream
> > > To:
user@...
> > > Date: Tuesday, July 14, 2009, 9:36 AM
> > > It is in
> > >
> >
> org.apache.velocity.app.VelocityEngine.getTemplate(String
> > > name, String encoding)
> > > They sure do when you're using BOM in your
> templates.
> > I
> > > though it would be nice to use the encoding which
> was
> > > determined by UnicodeInputStream.
> > >
> > > -----Ursprüngliche Nachricht-----
> > > Von: mailmur [mailto:
mailmur@...]
> > >
> > > Gesendet: Montag, 13. Juli 2009 21:16
> > > An: Velocity Users List
> > > Betreff: Re: getEncodingFromStream from
> > UnicodeInputStream
> > >
> > >
> > > I think its not possible, its basicly an
> internal
> > > bytesToChars issue to know about encoding.
> Textual
> > templates
> > > know nothing about byte storage they run at
> character
> > level
> > > nor know nothing about template loader instance
> was
> > used.
> > >
> > > What is it getTemplate() method you mean, can
> you
> > point me
> > > to the class?
> > >
http://svn.apache.org/repos/asf/velocity/engine/trunk/src/java/org/apache/velocity/> > >
> > >
> > >
> > > --- On Wed, 7/8/09,
Johann.Weber@...
> > > <
Johann.Weber@...>
> > > wrote:
> > > > From:
Johann.Weber@...
> > > <
Johann.Weber@...>
> > > > Subject: getEncodingFromStream from
> > > UnicodeInputStream
> > > > To:
user@...
> > > > Date: Wednesday, July 8, 2009, 2:48 PM
> > > > Hi all,
> > > >
> > > > Is there a way to get the encoding
> information
> > from
> > > > UnicodeInputStream to use it in the
> > getTemplate()
> > > method?
> > > > How do I can use the encoding which was
> auto
> > detected
> > > in case of unicode file recognition?
> >
> >
> >
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail:
user-unsubscribe@...
> > For additional commands, e-mail:
user-help@...
> >
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail:
user-unsubscribe@...
> > For additional commands, e-mail:
user-help@...
> >
> >
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
user-unsubscribe@...
> For additional commands, e-mail:
user-help@...
>
>