你是如何让 ASP.NET 输出 UTF-16 编码的文本的?
我在 .NET 中序列化一个默认为 UTF-16 格式的对象。现在我想将字符串作为输出响应发送给 .ashx 请求。
我收到错误:不支持从当前编码切换到指定编码。错误处理资源
如何告诉我的网站或页面使用 UTF-16 格式。
谢谢。
更新:阅读两个答案。
一般来说:不要。
作为 UTF-16 的网页混淆了许多工具,并使浏览器以奇怪的、意想不到的方式运行。(特别是:链接脚本、表单提交、代理)。UTF-16 只能作为二进制对象安全地提供,因此对于 Web 内容,坚持使用作为 ASCII 超集的编码 - 显而易见的选择是 UTF-8。
您引用的错误通常是您尝试读取其 <?xml encoding="..."?> prolog 与文件的实际编码冲突的 XML 文件时得到的错误。ASCII 编码的超集都不会发生冲突,因为“xml 编码”是 ASCII 并且在所有编码中都表示相同,但是如果您将 encoding="utf-16" 放在未保存为 UTF- 的 XML 文件中16,或者你没有把它放进去,那么解析器就无法处理逻辑上的不可能性。
以下对我有用:
Dim utf16 = New UnicodeEncoding(False, True)
Response.BinaryWrite(utf16.GetPreamble)
Response.ContentEncoding = utf16
顺便说一句,我需要这样做,因为我正在向 Excel 发送一个包含 unicode 字符的 html 表。(我知道,这不是创建 Excel 文件的最佳方式!)
Excel(和 LibreOffice Calc)需要 utf-16 并且不适用于 utf-8。Excel 在开头也需要 UTF16 BOM,因此调用 GetPreamble。