java - 如何在使用 EZ-Vcard 编写的 Vcard 中包含字符集?

标签 java character-encoding vcf-vcard

我正在使用 [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/

相关文章:

java - Admob 发布 ID 错误

ruby - 如何将已弃用的 iconv 更改为 String#encode 以进行无效的 UTF8 更正

string - 软件/操作系统中存储的字母表顺序是什么级别?

ios - 将地址簿导出到 vcard 文件

c# - 解析 vcard json C#

java - JSR-303 共享继承对象验证

java - FTP 看起来像 java/HTML 中的应用程序

javascript - 在 QR 码符号中存储 vCard 数据的最有效方法

java - 如何在 eclipse : without maven? 的 checkStyle 中使用自定义检查

c++ - 如何在 JetBrains Clion 中更改项目字符集