From 5063b0ed3dbec55afea43d9f5c2ff02bf0cf413e Mon Sep 17 00:00:00 2001 From: mh Date: Tue, 30 Apr 2002 17:42:18 +0000 Subject: [PATCH] make necessary changes to output UTF8 files and pages instead of ISO8859-1 and make the default output character encoding a config option in case someone is feeling adventurous. This means we support all knds of charset now. The DB data was always unicode. A new config option is necessary to use this (Mir.DefaultEncoding) --- source/Mir.java | 5 +++-- source/OpenMir.java | 7 +++++-- source/config.properties-dist | 5 +++++ source/mir/misc/HTMLTemplateProcessor.java | 3 +++ source/mir/storage/Database.java | 5 ++--- source/mircoders/producer/Producer.java | 15 ++++++++++----- templates-dist/admin/start_admin.template | 2 +- templates-dist/producer/content.template | 2 +- templates-dist/producer/featuresRSS.template | 2 +- templates-dist/producer/openposting.template | 2 +- templates-dist/producer/startpage.template | 2 +- templates-dist/producer/topiclist.template | 2 +- templates-dist/producer/wml2.xsl | 2 +- 13 files changed, 35 insertions(+), 19 deletions(-) diff --git a/source/Mir.java b/source/Mir.java index de346368..f6c70f40 100755 --- a/source/Mir.java +++ b/source/Mir.java @@ -62,7 +62,8 @@ public class Mir extends AbstractServlet { session = req.getSession(true); if (req.getServerPort() == 443) http = "https"; else http = "http"; - res.setContentType("text/html"); + res.setContentType("text/html; charset=" + +MirConfig.getProp("Mir.DefaultEncoding")); String moduleName = req.getParameter("module"); checkLanguage(session, req); @@ -302,7 +303,7 @@ public class Mir extends AbstractServlet { } public String getServletInfo() { - return "Mir 1.0 rev02 multilanguage"; + return "Mir "+MirConfig.getProp("Mir.Version"); } private void checkLanguage(HttpSession session, HttpServletRequest req) { diff --git a/source/OpenMir.java b/source/OpenMir.java index b8550838..8a8bb9a7 100755 --- a/source/OpenMir.java +++ b/source/OpenMir.java @@ -52,7 +52,8 @@ public class OpenMir extends AbstractServlet { setLanguage(session,getAcceptLanguage(req)); } - res.setContentType("text/html"); + res.setContentType("text/html; charset=" + +MirConfig.getProp("Mir.DefaultEncoding")); try { ServletModuleDispatch.dispatch(ServletModuleOpenIndy.getInstance(),req,res); } @@ -103,7 +104,9 @@ public class OpenMir extends AbstractServlet { } - public String getServletInfo(){ return "OpenIndy 1.0 rev01"; } + public String getServletInfo(){ + return "OpenMir "+MirConfig.getProp("Mir.Version"); + } } diff --git a/source/config.properties-dist b/source/config.properties-dist index 66534e40..ed949a98 100755 --- a/source/config.properties-dist +++ b/source/config.properties-dist @@ -198,6 +198,11 @@ Entity.Logfile=log/dbentity.log # Servlet / Module configurations # +# don't change this unless you really know your i18n. +# The default encoding charset used in the written html files as well +# as the dynamic output html. +# also used for the HTML charset meta tag. +Mir.DefaultEncoding=UTF8 Mir.Logfile=log/mir.log Mir.ErrorTemplate=error.template Mir.UserErrorTemplate=usererror.template diff --git a/source/mir/misc/HTMLTemplateProcessor.java b/source/mir/misc/HTMLTemplateProcessor.java index c2f10f23..062fd39e 100755 --- a/source/mir/misc/HTMLTemplateProcessor.java +++ b/source/mir/misc/HTMLTemplateProcessor.java @@ -32,6 +32,7 @@ public final class HTMLTemplateProcessor { private static String imageHost; private static String imagePath; private static String openAction; + private static String defEncoding; protected static String producerDocRoot = MirConfig.getProp("Producer.DocRoot"); protected static String producerStorageRoot = @@ -60,6 +61,7 @@ public final class HTMLTemplateProcessor { actionRoot = docRoot + "/servlet/Mir"; + defEncoding = MirConfig.getProp("Mir.DefaultEncoding"); openAction = MirConfig.getProp("Producer.OpenAction"); productionHost = MirConfig.getProp("Producer.ProductionHost"); videoHost = MirConfig.getProp("Producer.VideoHost"); @@ -231,6 +233,7 @@ public final class HTMLTemplateProcessor { // values in the templates. -mh // put standard configuration into tempalteRootmodel SimpleHash configHash = new SimpleHash(); + configHash.put("defEncoding", new SimpleScalar(defEncoding)); configHash.put("producerDocRoot", new SimpleScalar(producerDocRoot)); configHash.put("storageRoot", new SimpleScalar(producerStorageRoot)); configHash.put("productionHost", new SimpleScalar(productionHost)); diff --git a/source/mir/storage/Database.java b/source/mir/storage/Database.java index 9f56efc9..c04e992c 100755 --- a/source/mir/storage/Database.java +++ b/source/mir/storage/Database.java @@ -562,9 +562,8 @@ public class Database implements StorageObject { // alle durchlaufen bis nix mehr da theType = metadataTypes[i]; if (theType == java.sql.Types.LONGVARBINARY) { - InputStream us = rs.getAsciiStream(i + 1); - if (us != null) { - InputStreamReader is = new InputStreamReader(us); + InputStreamReader is = (InputStreamReader)rs.getCharacterStream(i + 1); + if (is != null) { char[] data = new char[32768]; StringBuffer theResultString = new StringBuffer(); int len; diff --git a/source/mircoders/producer/Producer.java b/source/mircoders/producer/Producer.java index b641371d..28e42dad 100755 --- a/source/mircoders/producer/Producer.java +++ b/source/mircoders/producer/Producer.java @@ -74,27 +74,32 @@ abstract public class Producer { File f = new File(producerStorageRoot + filename); File dir = new File(f.getParent()); dir.mkdirs(); - FileWriter outputFile = new FileWriter(f); + // it's important that we set the desired encoding. It should be UTF8 + // not the platform default. + OutputStreamWriter outputFileStream = + new OutputStreamWriter(new FileOutputStream(f), + MirConfig.getProp("Mir.DefaultEncoding")); PrintWriter outStream; if (compressed==true) { - outStream = new LineFilterWriter(outputFile); + outStream = new LineFilterWriter(outputFileStream); } else { - outStream = new PrintWriter(outputFile); + outStream = new PrintWriter(outputFileStream); } HTMLTemplateProcessor.process(null,template, model, outStream,null); - outputFile.close(); + outputFileStream.close(); outStream.close(); printHTML(htmlout, "Produced " + filename + ""); //theLog.printInfo("Produced: " + producerStorageRoot + filename); - //theLog.printDebugInfo("free mem:" + java.lang.Runtime.getRuntime().freeMemory()); + //theLog.printDebugInfo("free mem:" + java.lang.Runtime.getRuntime().freeMemory()); //theLog.printDebugInfo("total mem:" + java.lang.Runtime.getRuntime().totalMemory()); return true; } catch(IOException exception){ logHTML(htmlout, "Producer: File could not be written " + filename); + System.out.println(exception.toString()); return false; } catch(HTMLParseException exception){ logHTML(htmlout,"Producer: Error in HTML-parsing: " + filename); diff --git a/templates-dist/admin/start_admin.template b/templates-dist/admin/start_admin.template index 24dd61d1..0e529b62 100755 --- a/templates-dist/admin/start_admin.template +++ b/templates-dist/admin/start_admin.template @@ -1,7 +1,7 @@ ${lang("start.htmltitle")} - + diff --git a/templates-dist/producer/content.template b/templates-dist/producer/content.template index 58f41c80..53e00268 100755 --- a/templates-dist/producer/content.template +++ b/templates-dist/producer/content.template @@ -1,7 +1,7 @@ ${lang("producer.content.htmltitle")}${content.title} - + diff --git a/templates-dist/producer/featuresRSS.template b/templates-dist/producer/featuresRSS.template index 3e137cf3..74b3ac71 100755 --- a/templates-dist/producer/featuresRSS.template +++ b/templates-dist/producer/featuresRSS.template @@ -1,4 +1,4 @@ - + ${lang("producer.openposting.htmltitle")}${topic.title} - + diff --git a/templates-dist/producer/startpage.template b/templates-dist/producer/startpage.template index f738c49c..34836984 100755 --- a/templates-dist/producer/startpage.template +++ b/templates-dist/producer/startpage.template @@ -1,7 +1,7 @@ ${lang("producer.startpage.htmltitle")} - + diff --git a/templates-dist/producer/topiclist.template b/templates-dist/producer/topiclist.template index 1da84cd6..aaa02a7c 100755 --- a/templates-dist/producer/topiclist.template +++ b/templates-dist/producer/topiclist.template @@ -1,7 +1,7 @@ ${lang("producer.topiclist.htmltitle")}${topic.title} - + diff --git a/templates-dist/producer/wml2.xsl b/templates-dist/producer/wml2.xsl index 3787604f..601ebb91 100755 --- a/templates-dist/producer/wml2.xsl +++ b/templates-dist/producer/wml2.xsl @@ -4,7 +4,7 @@