0

我正在使用 Response.Write 将vCard下载到浏览器,以输出带有特殊重音字符的 .NET 字符串。Mime 类型是text/x-vcard并且法语字符在 Outlook 中出现错误,例如Montréal;Québec.NET 字符串Montréal Québec在浏览器中显示。

显然 vCard 默认格式是 ASCII。.NET 字符串是 Unicode UTF-16。

我正在使用来自 CodeProject.com 的 vCard 生成器代码

我玩过这个链接的 MSDN 页面底部的 System.Encoding 示例代码,将 unicode 字符串转换为字节,然后写入 ascii 字节,但后来我得到Montr?al Qu?bec了(进步但不是胜利)。此外,我尝试将响应的内容类型设置为 us-ascii 和 utf-8。

如果我在 Windows 记事本中打开下载的 vCard 并将其保存为 ANSI 文本(而不是默认的 unicode 格式)并在 Outlook 中打开它就可以了。所以我的假设是我需要下载 ANSI 字符集,但不确定我做错了还是对从哪里开始有误解。

更新:查看原始 HTTP,看来我的法语字符正在以意外的格式下载,所以看起来我需要在服务器端做一些工作...... 原始 http://img444.imageshack.us/img444/ 8533/charsd.png (全尺寸)

4

2 回答 2

1

éé当它被编码为 UTF-8 并被错误地解码为 ISO-8859-1 或 windows-1252(或“ANSI”,微软应用程序喜欢这样称呼它)时的样子。当您在记事本中打开文件时,它会自动检测编码为 UTF-8。然后通过将其保存为“ANSI”来更改编码,因为é该编码也支持该编码。

当您在 Outlook 中查看页面时,它说的编码是什么?HTTP 转储在我看来像是格式正确的 UTF-8,但 Outlook 似乎将其读取为 ISO-8859-1 或 windows-1252。我不使用 Outlook,也不知道它的怪癖;你确定你的标题正确吗?

于 2010-03-28T21:42:58.327 回答
0

你不需要转换任何东西!只需在 text/x-vcard 文档的HTTP 响应标头中指定响应是 UTF-8 编码的(Response.CharSetResponse.ContentEncoding类似的 - 不确定您的具体情况是什么)。

此外,您可以尝试发出UTF-8 字节顺序标记来帮助客户端确定编码。

于 2010-04-02T09:22:49.617 回答