Encoding 如何在vcard文件中正确存储umlauts和重音符号?

Encoding 如何在vcard文件中正确存储umlauts和重音符号?,encoding,utf-8,export,vcf-vcard,Encoding,Utf 8,Export,Vcf Vcard,从卡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 = ne

从卡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();
你猜怎么着?字符编码不正确。如果我在文本编辑器中打开文件,我会看到字符被弄乱了


有什么帮助吗?

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

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

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

cat对vcard文件.vcf进行编辑

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

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