下载CSV文件(UTF-8编码)ServiceStack

4

我是ServiceStack的新手。它有提供数据的CSV文件功能,但我需要以UTF8格式下载它,因为我得到了一些特殊字符。我已经尝试了这个配置设置。

SetConfig(new HostConfig
        {
            AppendUtf8CharsetOnContentTypes = new HashSet<string> { MimeTypes.Csv } 
        });

但是没有运气。 请建议我做错了什么。

2个回答

3

ServiceStack Text序列化器默认已经使用UTF8进行序列化。下面的配置只是添加了UTF8后缀,以便返回完整的Content-Type为text/csv; charset=utf-8

SetConfig(new HostConfig {
    AppendUtf8CharsetOnContentTypes = new HashSet<string> { MimeTypes.Csv } 
});

这并不改变它序列化为的UTF-8格式。

我已经做了一个更改,允许您修改ServiceStack.Text中不同文本序列化程序使用的UTF8Encoding 在这个提交中

这将允许您指定使用UT8 BOM来发射CSV序列化器:

CsvSerializer.UTF8Encoding = UTF8Encoding(true);

这个变更从v4.0.37+版本开始生效,现在可以在MyGet上获取。

谢谢您的回复,mythz。我在Notepad++中检查了下载的文件,并且当我检查编码时,它显示为UTF-8无BOM。当我将其修改为仅UTF-8时,特殊字符就消失了。请告诉我可以更改哪个设置来使我只获取UTF-8编码的文件。 - JSHunjan
听起来像是utf-8没有BOM/字节顺序标记。BOM是可选的-https://dev59.com/enE95IYBdhLWcg3wn_f2. 你可能需要自定义序列化器在流中发送BOM序列。 - Raul Nohea Goodness
@RaulNoheaGoodness 是的,你说得对,但是我们可以像下面链接中描述的那样在客户端添加BOM字符。 https://dev59.com/O2Mm5IYBdhLWcg3wFL_s - M_Farahmand

1

对于 ServiceStack 版本 > 5.x.x,您必须像这样更改代码

CsvSerializer.UseEncoding = PclExport.Instance.GetUTF8Encoding(true);

默认情况下,它使用 CsvSerializer.UseEncoding = PclExport.Instance.GetUTF8Encoding(false); // without BOM。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接