我正在使用 [EZ-VCards 库][1] 在 Java Web 应用程序中生成一些 VCard 数据。
除了编码问题之外,它工作正常并且使用起来非常简单。这些值是使用 UTF-8 编写的(我使用十六进制编辑器进行了检查),但 vcard 中未明确指定编码。
因此,当导入到客户端程序(例如 Outlook 或 OSX 中的联系人应用程序)时,重音字符会被错误表示。如果指定了字符集,则值将正确导入。
我得到了什么:
FN:André Müller
我想要什么:
FN;CHARSET=UTF-8:André Müller
如何使用 EZ-Vcard 添加此字符集信息?我阅读了文档(示例)和 JavaDoc API,但找不到执行此操作的方法。
编辑:Michael 的回答回答了我原来的问题,但不幸的是 Outlook 无法很好地处理 UTF-8。所以我需要用 ISO-8859-1 进行编码。我设法手动创建了一个 vcard 字符串,该字符串可以在 Outlook 和 Apple 联系人中正确运行和导入,如下所示:
N;CHARSET=ISO-8859-1:André;Müller;;;
FN;CHARSET=ISO-8859-1:André Müller
在 Web Controller 级别,我确保返回的字符串确实采用 iso-8859-1 进行编码。
那么我如何使用 EZ-Vcard 实现这一目标?
最佳答案
尝试使用引用打印编码:
VCard vcard = new VCard();
FormattedName fn = vcard.setFormattedName("André Müller");
fn.getParameters().setEncoding(Encoding.QUOTED_PRINTABLE);
fn.getParameters().setCharset("ISO-8859-1");
vcard.write(System.out);
打印:
BEGIN:VCARD
VERSION:3.0
FN;ENCODING=quoted-printable;CHARSET=ISO-8859-1:Andr=E9 M=FCller
PRODID:ez-vcard 0.9.8
END:VCARD
请告诉我这是否有效!
关于java - 如何在使用 EZ-Vcard 编写的 Vcard 中包含字符集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34062710/