Java String结果的API设计包含特定于charset的数据

时间:2016-06-04 08:06:42

标签: java html string encoding api-design

在生成HTML(或XHTML)的文档转换器的API中,我想公开这些方法:

// 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);

客户端代码无法使用基于文件的方法生成错误文档,它可以使用指定的字符集安全地写入结果文档。

如果客户端代码不遵守所选的字符集,则基于字符串的方法会导致问题 - 例如,如果charset参数是ISO-8859-1但结果字符串在Web中作为UTF-8内容提供应用程序:

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);
}

问题:我应该考虑哪些选项来设计API,以便引导用户正确使用结果字符串?

  • 弃用该方法并提供一个返回字节数组的方法
  • 使用包含编码的方法名称(convertToUTF_8,convertToISO_8859_1 ......)

结果字符串可以是

<!DOCTYPE html>
<html>
  <head>
    <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Untitled document</title>
  </head>
  <body>
    <p>Mot&ouml;rhead</p>
  </body>
</html>

1 个答案:

答案 0 :(得分:0)

我不知道您的确切用例,但有一种可能性是使用适当的对象上下文来保护文档(而不仅仅是The authenticity of host 'SERVER ([IP_ADDRESS]:PORT)' can't be established. RSA key fingerprint is 11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:ff. Are you sure you want to continue connecting (yes/no)? ):

String

这样你就可以保留对#34; string&#34;可写入不同的目标。

我不确定您是否需要public interface Document { void writeTo(ServletResponse response); } ,因为如果文档看到响应已经有不同的编码,则该文档可以自动转换其内容。但即使你需要convert,你也可以这样做:

convert

这将返回一个不同字符集的新文档。