我在测试 golang Web 应用程序时遇到问题。在部署版本中,nginx 位于应用程序前面并显式设置charset utf8;
以便所有文本类型都附加字符集声明。
在测试中,我直接访问 golang 应用程序,这里的内容类型没有字符集集。当尝试为类似的库提供服务时,这会导致问题d3 https://github.com/mbostock/d3/blob/v3.5.6/d3.js#L1261其中有如下行:
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 声明的最佳方法是什么?
文件服务器调用mime.TypeByExtension http://godoc.org/mime#TypeByExtension获取内容类型。如果没有为扩展注册类型,则 FileServer 调用http.DetectContentType http://godoc.org/net/http#DetectContentType从文件内容猜测类型。
如果文本/内容类型未指定字符集参数,则 mime 包会自动将“charset=utf-8”参数添加到内容类型中。
要调试此问题,请检查系统 mime.types 文件是否指定了文件扩展名的内容类型以及 charset 参数是否为“charset=utf-8”或未设置 charset 参数。
如果系统 mime.types 条目丢失或不正确,则调用mime.AddExtensionType http://godoc.org/mime#AddExtensionType覆盖系统设置。可以在提供任何内容之前调用一次。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)