Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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
C# 使用WEB API媒体格式化程序时excel中无法使用的特殊字符_C#_Csv_Asp.net Web Api - Fatal编程技术网

C# 使用WEB API媒体格式化程序时excel中无法使用的特殊字符

C# 使用WEB API媒体格式化程序时excel中无法使用的特殊字符,c#,csv,asp.net-web-api,C#,Csv,Asp.net Web Api,我正在使用Microsoft提供的以下示例创建csv格式化程序 但是,尽管指定了编码,但当我在Excel中打开csv文件时,特殊字符(如×)无法正确呈现。但在其他应用程序中,包括普通记事本中,它看起来还可以 public MyCsvFormatter(MediaTypeMapping mediaTypeMapping) { MediaTypeMappings.Add(mediaTypeMapping); SupportedMediaTypes.Add(new MediaTypeHea

我正在使用Microsoft提供的以下示例创建csv格式化程序

但是,尽管指定了编码,但当我在Excel中打开csv文件时,特殊字符(如×)无法正确呈现。但在其他应用程序中,包括普通记事本中,它看起来还可以

public MyCsvFormatter(MediaTypeMapping mediaTypeMapping)
{
  MediaTypeMappings.Add(mediaTypeMapping);

  SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/csv"));
  SupportedEncodings.Add(new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
  SupportedEncodings.Add(Encoding.GetEncoding("iso-8859-1"));
}

public override void WriteToStream(Type type, object value, Stream writeStream, HttpContent content)
{
  Encoding effectiveEncoding = SelectCharacterEncoding(content.Headers);

  using (var writer = new StreamWriter(writeStream,effectiveEncoding))
  {
     // write content            
  }
}      

渲染为,因此其中似乎有一个额外的字符,仅在excel中显示

尝试将字节顺序标记作为流中的第一条记录写入:

 byte[] BOM = new byte[] { 0xef, 0xbb, 0xbf };

另外,使用UTF32而不是UTF8可能会有所帮助

您能提供一个生成CSV的示例以及您正在处理的特殊字符类型吗?谢谢。我添加了一个小错误,不清楚您在文件中使用了什么编码。我认为您应该始终使用UTF8来避免特殊/国际字符的问题。我认为UTF8编码部分会将编码指定为unicode。我尝试删除iso-8859-1并对UTF编码进行硬编码,但它给出了相同的结果字节顺序标记似乎是解决方案。似乎可以通过设置SupportedEncodings.Add(newutf8encoding(encoderShouldEmitUTF8Identifier:true))来实现这一点;