Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
您是如何让ASP.NET输出UTF-16编码文本的?_.net_Asp.net_Xml_Utf 16_Ashx - Fatal编程技术网

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

您是如何让ASP.NET输出UTF-16编码文本的?,.net,asp.net,xml,utf-16,ashx,.net,Asp.net,Xml,Utf 16,Ashx,您是如何让ASP.NET输出UTF-16编码文本的 我在.NET中序列化了一个默认为UTF-16格式的对象。现在我想将字符串作为.ashx请求的输出响应发送 我得到一个错误: 不支持从当前编码切换到指定编码。错误处理资源 我如何告诉我的网站或页面使用UTF-16格式 谢谢 更新:阅读两个答案。将属性更改为?一般情况下:不要 作为UTF-16的网页混淆了许多工具,并使浏览器以奇怪、意外的方式运行。(特别是:链接脚本、表单提交、代理)。UTF-16只能安全地作为二进制对象使用,因此对于web内容,请

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

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

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

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

谢谢

更新:阅读两个答案。

将属性更改为?

一般情况下:不要

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


您引用的错误通常是您在尝试读取其序言与文件的实际编码冲突的XML文件时所遇到的错误。ASCII编码的超集从来没有冲突过,因为“xml编码”是ASCII,并且在所有的超集中都表示相同,但是如果您将encoding=“utf-16”放在一个未保存为utf-16的xml文件中,或者在保存时未将其放入,则解析器无法处理逻辑上的不可能性。

以下内容对我有效:

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,因此需要调用GetPremission。

引发异常的确切行是什么?请编辑问题。由于编码格式的原因,Internet Explorer中的XML解析器抛出了错误。所以我认为从技术上讲,它突破了输出的最初几个字符。请参阅我对已接受答案的第4或第5条评论,了解如何将其Xml序列化为UTF-8。实际上,我在这里使用的是ToXml扩展方法:。因为System.String在内部存储为UTF-16,这就是我的问题所在。我将不得不使用一个更长的ToXml方法来解释这一点,并将其转换为UTF-8XmlSerializer。需要将(流,对象)序列化到字节流,而不是(TextWriter,对象)?@bobince,这就是我在网上看到的示例。哦,好吧,额外的几行代码。仅此而已。虽然不完全是我写的,但足够接近了:我使用了UTF8,这个例子也使用了TextWriter。我没有尝试过,但在我看来,接受流的方法应该是面向字节的,因此不会产生虚假的“encoding=”UTF-16“。