作为HTTP内容协商的一部分,charset通常和Accept/Content-Type,Accept-Charset头字段配合使用。
nginx中可以对charset的值进行控制,直接看配置和说明
#本配置文件测试charset,对应模块为ngx_http_charset_module #source_charset 指定响应使用的字符集,定义响应本身的字符集,至于客户端如何解析,通过charset控制。#charset 添加指定字符集到Context-Type头部,它不是定义响应本身的字符集,而是告诉浏览器如何解析响应,off表示移除添加到Content-Type的设置#如果source_charset和charset的设置有冲突,则需要用charset_map做转换#转换使用转换表,缺省nginx携带了几个转换文件如conf/koi-utf,转换表用charset_map定义#nginx缺省的charset koi8-r;是斯拉夫语的,也就是俄语的常用字符集#下例展示的是一个charset和source_charset设置不一致的情况,如何设置charset,charset_map,source_charsetcharset_map utf-8 gbk {} #定义转换表,可以为空,当然也不保证实际显示的正确性。#charset gbk; server { listen 80; server_name test test1; source_charset utf-8; #charset utf-8,gbk;#charset可以罗列多个 charset gbk; #charset off; root html; access_log logs/200_charset_access.log main; error_log logs/200_charset_error.log debug; #default_type官网文档显示缺省类型是text/plain,但如果不显示添加default_type,实际显示的类型是application/octet-stream #并且会影响charset的设置,如果不设置default_type,则charset无法生效。 default_type text/plain; location / { return 200 'okn'; } } #curl实测的效果,charset返回gbk #[root@test01 conf]# curl test -I #HTTP/1.1 200 OK #Server: nginx/1.20.1 #Date: Tue, 08 Feb 2022 02:40:24 GMT #Content-Type: text/plain; charset=gbk #Connection: keep-alive
Chrome返回的效果: