一尘不染

在golang HTTP FileServer的Content-Type标头上设置'charset'属性

go

测试golang网络应用程序时出现问题。在已部署的版本中,nginx位于应用程序的最前面,并进行显式设置,charset utf8;以便所有文本内容类型都附加一个字符集声明。

在测试中,我直接打了golang应用程序,这里的内容类型没有字符集。尝试提供类似d3这样的库时,这会导致问题:

var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π;

由于golang未指定字符集,因此这些字符在chrome中呈现为:

var ε = 1e-6, ε2 = ε * ε....

使golang http服务器在HTTP标头上输出charset = utf8声明的最佳方法是什么?


阅读 706

收藏
2020-07-02

共1个答案

一尘不染

FileServer调用mime.TypeByExtension以获取内容类型。如果没有为扩展名注册任何类型,则FileServer调用http.DetectContentType从文件内容中猜测类型。

如果文本/内容类型未指定charset参数,则mime程序包会自动将’charset = utf-8’参数添加到内容类型。

要调试此问题,请检查系统mime.types文件是否为文件扩展名指定了内容类型,并且charset参数为’charset =
utf-8’或未设置charset参数。

如果系统mime.types条目丢失或不正确,请调用mime.AddExtensionType以覆盖系统设置。可以在提供任何内容之前调用一次。

2020-07-02