如何在使用EZ-Vcard写的Vcard中包含charset?

时间:2015-12-03 09:52:12

标签: java character-encoding vcard

我正在使用[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实现这一目标?

1 个答案:

答案 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

如果有效,请告诉我!