0

从卡 4.0 的 RFC 中,我了解到 vcard 4.0 始终是 utf-8。

我正在使用 ez-vcard 将联系人导出到通过 http 传输的 export.vcf 文件中:

response.setContentType("text/vcard; charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
PrintWriter writer = response.getWriter();

VCardWriter vCardWriter = new VCardWriter(writer, VCardVersion.V4_0);

// add cards...

vCardWriter.close();

你猜怎么着?字符编码不正确。如果我在文本编辑器中打开文件,我会看到字符混乱。

有什么帮助吗?

4

1 回答 1

1

它可能会忽略内容类型中指定的字符编码,因为您将其设置为text/html.

尝试使用设置字符编码setCharacterEncoding()(确保在调用之前调用它getWriter())。

response.setContentType("text/vcard");
response.setCharacterEncoding("UTF-8");
response.setStatus(HttpServletResponse.SC_OK);
PrintWriter writer = response.getWriter();

此外,请确保您的文本编辑器正确读取文件。在我的测试过程中,我发现 Eclipse 无法正确显示 UTF-8 字符,因为它被配置为以不同的字符集加载文件。尝试从终端查看文件内容:

cat the-vcard-file.vcf

编辑:还有一件事:不要关闭VCardWriter对象。这将关闭 servlet 的PrintWriter对象,你绝不能关闭它!!

于 2013-09-03T13:28:39.097 回答