【问题标题】:How did you get ASP.NET to output UTF-16 encoded text?你是如何让 ASP.NET 输出 UTF-16 编码的文本的?
【发布时间】:2010-10-05 01:38:28
【问题描述】:

您是如何让 ASP.NET 输出 UTF-16 编码的文本的?

我在 .NET 中序列化一个默认为 UTF-16 格式的对象。现在我想将字符串作为输出响应发送给 .ashx 请求。

我得到错误: 不支持从当前编码切换到指定编码。错误处理资源

如何告诉我的网站或页面使用 UTF-16 格式。

谢谢。

更新:阅读两个答案。

【问题讨论】:

  • 引发异常的确切行是什么?请编辑问题。
  • Internet Explorer 中的 XML Parser 由于编码格式而抛出错误。所以我认为从技术上讲,它打破了输出的前几个字符。请参阅我对已接受答案的第 4 或第 5 条评论,了解我必须做些什么才能将其 Xml 序列化为 UTF-8

标签: .net asp.net xml utf-16 ashx


【解决方案1】:

以下内容对我有用:

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。

【讨论】:

    【解决方案2】:

    一般来说:不要。

    UTF-16 格式的网页混淆了许多工具,并使浏览器以奇怪的、意想不到的方式运行。 (特别是:链接脚本、表单提交、代理)。 UTF-16 只能作为二进制对象安全地提供,因此对于 Web 内容,请坚持使用作为 ASCII 超集的编码 - 显而易见的选择是 UTF-8。

    您引用的错误通常是当您尝试读取其 序言与文件的实际编码冲突的 XML 文件时得到的。 ASCII 编码的超集都不会发生冲突,因为“xml 编码”是 ASCII 并且在所有这些编码中都表示相同,但​​是如果您将 encoding="utf-16" 放在未保存为 UTF- 的 XML 文件中16,或者你在它的时候没有把它放进去,那么解析器就无法处理逻辑上的不可能性。

    【讨论】:

    • 实际上我从这里使用 ToXml 扩展方法:solidcoding.blogspot.com/2007/11/c-toxml-extension-method.html。因为 System.String 在内部存储为 UTF-16,这就是我的问题所在。我将不得不使用更长的 ToXml 方法,该方法占 4 并转换为 UTF-8
    • 也许 XmlSerializer.Serialize(Stream, Object) 到字节流上,而不是 (TextWriter, Object) 是需要什么?
    • @bobince,这就是我在网上看到的例子。哦,好几行额外的代码。就是这样。
    • 不完全是我写的,但足够接近:blog.newslacker.net/2008/02/net-xml-serialization.html 我使用的是 UTF8
    • 那个例子也使用了TextWriter。我没有尝试过,但在我看来,接受 Stream 的方法应该是面向字节的,因此不会产生虚假的 'encoding="UTF-16"'。
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 2012-03-16
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 2011-10-02
      • 1970-01-01
      相关资源
      最近更新 更多