C# 使用WEB API媒体格式化程序时excel中无法使用的特殊字符
我正在使用Microsoft提供的以下示例创建csv格式化程序 但是,尽管指定了编码,但当我在Excel中打开csv文件时,特殊字符(如×)无法正确呈现。但在其他应用程序中,包括普通记事本中,它看起来还可以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
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))来实现这一点;