In der API eines Dokuments Wandler enthalten, die HTML (oder XHTML) erzeugt, möchte ich diese Methoden entlarven:API-Design für Java String Ergebnisse, die charset spezifische Daten
// Convert the input file to a file using the specified charset
void convert(File in, File out, Charset charset);
// Convert the input document to a string using the specified charset
String convert(String in, Charset charset);
Es gibt keine Möglichkeit für Client-Code, um fehlerhafte Dokumente mit der dateibasierten Methode zu erzeugen, schreibt er sicher ein Ergebnisdokument mit dem angegebenen Zeichensatz.
Die String-basierte Methode führt offensichtlich zu Problemen, wenn der Client-Code den gewählten Zeichensatz nicht berücksichtigt - zum Beispiel wenn der Zeichensatzparameter ISO-8859-1 ist, aber das Ergebnis String als UTF-8-Inhalt in a Web-Anwendung:
String html = convert(getInputDocument(), ISO_8859_1);
...
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
try (PrintWriter out = response.getWriter()) {
out.print(html);
}
Frage: welche Optionen soll ich die API so zu gestalten, dass die Benutzer geführt werden Nutzung der Ergebnis-Strings zu korrigieren?
- deprecate des Verfahrens und ein Verfahren bereitzustellen, das
- Verwendung Methodennamen ein Byte-Array zurückgibt, die die Kodierung enthalten (convertToUTF_8, convertToISO_8859_1 ...)
Der String Ergebnis könnte für Beispiel sein
<!DOCTYPE html>
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Untitled document</title>
</head>
<body>
<p>Motörhead</p>
</body>
</html>