Ich habe einige Probleme mit einem benutzerdefinierten Zeichensatz aus einer Webanwendung. Der Zeichensatz wird in einer JAR bereitgestellt und Charset.forName("MYCUSTOMCHARSET")
funktioniert ohne Probleme von einer Java SE-Anwendung. Innerhalb einer Webanwendung wird diese Methode jedoch UnsupportedCharsetException
auslösen.Verwenden Sie benutzerdefinierte Zeichensatz in Webapp
Ich verstehe, dass dies ein Problem von Klassenladeprogrammen ist und ich weiß, dass ich das Problem lösen kann, indem ich das JAR dem Klassenpfad der Servlet-Engine hinzufüge. Aber das ist nicht was ich will. Ich möchte in der Lage sein, eine eigenständige WAR-Datei an meinen Kunden zu liefern, ohne dass der Kunde mit dem umgebenden Container herumspielen muss.
Mit anderen Worten: Ich suche nach einer Methode, die es meiner Webanwendung erlaubt, den Zeichensatz "manuell" zu laden. Von dem Ordner services
in der JAR, die den benutzerdefinierten Zeichensatz bereitstellt, kann ich den vollständig qualifizierten Namen des CharsetProviders sehen, z. com.acme.CustomCharsetProvider
. Ich frage mich, ob mir das irgendwie hilft?
Plattform: Java 8 und Tomcat 8.
@JordiCastilla. Ich denke, Sie beziehen sich auf die Verwendung von Zeichensätzen im Zusammenhang mit der Codierung/Decodierung von HTTP-Anfragen? Ich spreche von der Verwendung von Zeichensätzen im Allgemeinen, z. zum Codieren/Decodieren eines Strings * innerhalb * der Anwendung selbst. Auch meine Frage ist nicht wirklich spezifisch für Tomcat, obwohl ich mit einer Tomcat-spezifischen Lösung einverstanden bin. – peterh
In der Tat 'META-INF/services/java.nio.charset.spi.CharsetProvider' und dann' for (CharsetProvider charsetProvider: ServiceLoader.load (CharsetProvider.class)) { ... '? –
@ JoopEggen. Vielen Dank. Siehe meine vorgeschlagene Lösung unten. – peterh