我正在使用[EZ-VCards库] [1]在Java webapp中生成一些VCard数据。
除编码问题外,它工作正常并且使用非常简单。这些值是使用UTF-8编写的(我使用十六进制编辑器检查过),但是在vcard中没有明确指定编码。
因此,当在Outlook等客户端程序或OSX中的“联系人”应用程序中导入时,重音字符会被错误地重新呈现。如果指定了charset,则会正确导入值。
我得到了什么:
FN:André Müller
我想拥有什么:
FN;CHARSET=UTF-8:André Müller
如何使用EZ-Vcard添加此charset信息?我阅读了doc(examples)和JavaDoc API,但找不到方法。
编辑:迈克尔的回答回复了我原来的问题,但不幸的是,Outlook对UTF-8不会很好。所以我需要编码ISO-8859-1。我设法手动创建一个在Outlook和Apple Contacts中正常工作和导入的vcard字符串,它看起来像这样:
N;CHARSET=ISO-8859-1:André;Müller;;;
FN;CHARSET=ISO-8859-1:André Müller
在Web控制器级别,我确保返回的字符串确实在iso-8859-1中编码。
那么如何使用EZ-Vcard实现这一目标?
答案 0 :(得分:1)
尝试使用quoted-printable encoding:
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
如果有效,请告诉我!