在 Windows 中使用 vCard 进行 UTF8 编码

Posted

技术标签:

【中文标题】在 Windows 中使用 vCard 进行 UTF8 编码【英文标题】:UTF8 Encoding with vCards in Windows 【发布时间】:2012-01-26 21:29:07 【问题描述】:

我在一个网站上实现了一个 vCard。问题是特殊字符在 windows 上没有被正确解析。

我可以让它在 Mac 上正常工作,但是一旦我在 Windows(Windows 联系人)中打开 vcf,它就会变得一团糟。当我在记事本中打开 vcf 时,它会正常显示字符。

我尝试了所有能找到的 vcf 版本(2.1、3.0、4.0)。我在我的内容类型标题中使用了 charset-utf-8 (text/x-vcard; charset: utf-8)。我使用了 N;CHARSET=utf-8: (以及其他标签)。

一切都无济于事。

有人对此有解决方案吗?感谢您分享您的见解。

使用的标题:

header("Content-type: text/x-vcard; charset=utf-8");
header("Content-Disposition: attachment; filename=".$this->filename.".vcf");
header("Pragma: public");

【问题讨论】:

你的header有点臭,你试过了吗 Content-type: text/x-vcard; charset="utf-8" @EugenRieck 仍然是一个错字:text/x-vcard; charset=utf-8 感谢 Eugen 和 Joop。不幸的是,这没有帮助。正如您在我的问题中看到的那样,这是我已经尝试过的事情之一。我在问题中添加了使用的标题。 根据Wikipedia,VCards 的正确 MIME 类型是“text/vcard”... 你的代码和 header() 函数是用 Java 还是 php 或 ASP 还是其他语言编写的? 【参考方案1】:

要让 Outlook 导入 UTF-8 vCard,您必须打开 Outlook 选项,转到高级 > 国际选项,然后选择 UTF-8 用于外发电子邮件和外发 vCard ... 瞧 - 导入工作!

这不是很明显吗,必须设置导出选项才能设置导入...?谢谢微软:P

【讨论】:

这很简单,并且在带有 UTF-8 vCard 的德语 Windows 10 上与德语 Outlook 2016 配合使用非常好。我必须更改的唯一选项是将 vCard 的“导出/传出”选项更改为“Unicode (UTF-8)”。你是对的@user808667,这真的不是那么明显!【参考方案2】:

我发现我没有在 vCard 字段中提供 ;CHARSET=utf-8,而是提供了 ;CHARSET=windows-1252,这导致 vcard 在 Outlook 2010 中正确打开。

不是适合所有人的解决方案,但希望这对某人有所帮助。

【讨论】:

在我的情况下,内容是用 utf-8 编码的,最后强制使用 utf-8 标头。现在我检查 Windows 操作系统 -> 然后是 iso 内容编码,否则是 utf-8 编码。效果很好。【参考方案3】:

对我来说,使用 UTF-8 并在 Mac OS X 上可读所有波兰字符,如 ĘĄĆŻŹŃŁÓŚ ęąćżźńłóś 足以切换到声明 VERSION:3.0

【讨论】:

对我不起作用(展望 2013)。你能提供一个完整的电子名片供我参考吗?【参考方案4】:

使用 ISO-8859-1 应该没问题。只需确保链中的每个部分都使用该编码(.vcf 文件、.vcf 文件中的编码声明以及您的标头)。

标题:

Content-Type: text/x-vcard; charset=iso-8859-1

Vcard(例如,必须使用 iso-8859-1 编码保存):

N;CHARSET=iso-8859-1:Übermann

在 Windows、OS X、iosandroid 上测试。

【讨论】:

你用的是什么版本?我在 Windows 8 上使用 3.0 版,但它不起作用 我使用的是 3.0,例如,请参阅 pastebin.com/HBW9LgJi。在 Windows 8 上的我的客户端 Outlook(未知版本)上测试。您确定实际数据也在 ISO-8859-1 中吗?我在我的脚本 (PHP) 中使用 utf8_decode() 其实我用的是node.js。无论如何,对于 Windows,iso-8859-1 或 utf-8 是相同的(不起作用),但如果我用 Android 读取同一张卡,那就没问题了。希望他们修复这个错误。我也在使用 vCard 3.0 版。 听起来你在某个地方有 UTF-8,不要忘记源数据本身必须是 ISO-8859-1,例如数据库、源代码等。【参考方案5】:

比较了 2 个文件,一个来自不同的服务和我的。似乎其他服务的工作版本使用了Content-Type: text/x-vcard; charset=iso-8859-1

【讨论】:

以上是关于在 Windows 中使用 vCard 进行 UTF8 编码的主要内容,如果未能解决你的问题,请参考以下文章

Outlook 中 PHP 生成的 vCard 的字符编码问题

在C#Windows phone 8.1中生成.vcf卡/名片的二维码

Android 使用VCard数据类型 异步进行联系人备份与恢复操作

Android 使用VCard数据类型 异步进行联系人备份与恢复操作

Android 使用VCard数据类型 异步进行联系人备份与恢复操作

使用 Python 的 Vcard 解析器