调试下载到浏览器的ASP.NET字符串(MontrÃ;©;al而不是Montré;al)

调试下载到浏览器的ASP.NET字符串(MontrÃ;©;al而不是Montré;al),asp.net,http,encoding,character-encoding,vcf-vcard,Asp.net,Http,Encoding,Character Encoding,Vcf Vcard,我正在使用Response.Write将a下载到浏览器,以输出带有特殊重音字符的.NET字符串。Mime类型为文本/x-vcard和 法语字符在外观上似乎是错误的,例如Montréal;魁北克省。网络字符串在浏览器中显示为Montréal Québec 显然,vCard的默认格式是ASCII。NET字符串是Unicode UTF-16 我在用这个 我玩过这个系统。通过编码将unicode字符串转换成字节,然后写入ascii字节,但随后我得到了魁北克省蒙特勒阿尔(取得了进展,但不是胜利)。我还

我正在使用Response.Write将a下载到浏览器,以输出带有特殊重音字符的.NET字符串。Mime类型为文本/x-vcard和 法语字符在外观上似乎是错误的,例如
Montréal;魁北克省
。网络字符串在浏览器中显示为
Montréal Québec

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

我在用这个

我玩过这个系统。通过编码将unicode字符串转换成字节,然后写入ascii字节,但随后我得到了
魁北克省蒙特勒阿尔
(取得了进展,但不是胜利)。我还尝试将内容类型设置为响应的us ascii和utf-8

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

更新:查看原始HTTP,似乎我的法语字符正在以意外的格式下载,因此看起来我需要在服务器端做一些工作。。。
Ã
就是当它被编码为UTF-8并被错误地解码为ISO-8859-1或windows-1252(或微软应用程序喜欢称之为“ANSI”)时的样子。在记事本中打开文件时,它会自动检测编码为UTF-8。然后通过将其保存为“ANSI”来更改编码,这是因为该编码也支持
é


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

您不需要转换任何内容!只需在text/x-vcard文档的中指定响应是UTF-8编码的(
response.CharSet
response.ContentEncoding
或类似内容-不确定您的具体情况)


此外,您还可以尝试发出一个,以帮助客户端确定编码。

发出UTF8会导致每个拉丁字符有两个字节,并且无法解释这些vCard。我认为UTF-8与ANSI兼容,但与ASCII不兼容。ANSI格式有效。更正:我应该说我认为UTF-8与ASCII兼容,但与ANSI不兼容。@jdk UTF-8与ASCII兼容,因为ASCII是UTF-8的一个子集,或者更确切地说,UTF-8被设计为与ASCII向后兼容。当你说“无法解释”时,那是什么意思?是谁干的?问题中的Pic显示了一些法语字符的两字节序列(例如Montreal),而不是一个。VCard需要一致的1字节字符。@jdk如果您使用ISO-8859-1而不是UTF-8,它可能会在您的计算机上工作,因为ISO-8859-1包含大多数法语字符,但这只是因为您的Windows设置为在实际编码未知时返回到特定的8位编码。