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. [ Velocity.properties ] input.encoding = UTF-8
This is Velocity loader limitation, it should use Reader* instead of InputStream* interface. All problems would go away if Velocity used UnicodeReader implementation. http://koti.mbnet.fi/akini/java/unicodereader/ http://koti.mbnet.fi/akini/java/unicodereader/UnicodeReader.java.txt --- On Wed, 7/22/09, mailmur <mail...@yahoo.com> wrote: > From: mailmur <mail...@yahoo.com> > Subject: Re: AW: AW: getEncodingFromStream from UnicodeInputStream > To: "Velocity Users List" <user@velocity.apache.org> > 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.we...@eventim.de > <johann.we...@eventim.de> > wrote: > > > From: johann.we...@eventim.de > <johann.we...@eventim.de> > > Subject: AW: AW: getEncodingFromStream from > UnicodeInputStream > > To: user@velocity.apache.org > > 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:mail...@yahoo.com] > > > > 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.we...@eventim.de > > <johann.we...@eventim.de> > > wrote: > > > > > From: johann.we...@eventim.de > > <johann.we...@eventim.de> > > > Subject: AW: getEncodingFromStream from > > UnicodeInputStream > > > To: user@velocity.apache.org > > > 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:mail...@yahoo.com] > > > > > > 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.we...@eventim.de > > > <johann.we...@eventim.de> > > > wrote: > > > > From: johann.we...@eventim.de > > > <johann.we...@eventim.de> > > > > Subject: getEncodingFromStream from > > > UnicodeInputStream > > > > To: user@velocity.apache.org > > > > 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-unsubscr...@velocity.apache.org > > For additional commands, e-mail: user-h...@velocity.apache.org > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org > > For additional commands, e-mail: user-h...@velocity.apache.org > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org > For additional commands, e-mail: user-h...@velocity.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org For additional commands, e-mail: user-h...@velocity.apache.org