WEB应用之:编码

来源:互联网 发布:中国碳纤维技术 知乎 编辑:程序博客网 时间:2024/05/23 00:05

编码

一. PHP的header()函数与HTML<meta>标签

HTTP响应格式

HTTP 响应包含四部分,一是Status Line,二是Header部分,三是Body部分,其中,二三部分由空行隔开。

Body部分是完整的文档,例如:

<!DOCTYPE html PUBLIC ...>

<html xmlns=""    xml:lang="en">

<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" ></head>

<body>for test</body>

</html>

Status Line指出协议版本、响应编码和状态,例如:

HTTP/1.1    200    ok

Header部分提供关于缓存、编码、服务器信息等各种信息,例如:

Cache-Control:public

Content-Type:text/html;charset=gb2312

Expires:

Last-Modified:


注意到Header部分和Body部分都可能存在Content-Type,其中指定的编码指出该使用什么样的解码方式来解读发送给浏览器的文档。不过,浏览器会优先采用Header部分指定的Content-Type。

设置HTTP响应的Header部分的Content-Type,有多种方式。按优先级由高到低,一是在PHP文档(例如index.php)中使用header()函数;二是在php配置文件中指定default_mimetype和default_charset;三是在APACHE的配置文件httpd.conf中使用指令AddDefaultCharset 。这几种方式都会导致通过<meta>标签指定的字符编码被忽略,header()指出的编码优先级比httpd.conf中配置的编码高。尽量不要使用AddDefaultCharset,否则<meta>标签指定编码的方法就失效了;对于PHP程序,使用header()函数指出编码是好习惯,有比较好的移植性。


二. 文件本身的编码

老工程师倾向于统一字符编码为UTF-8,即,文件的编码为UTF-8,发送给浏览器的文件中,指明编码为UTF-8(通过<meta>或php的header()函数等),然后就省却各种转换。(通过<meta>和<header>等)

尤其是,AJAX默认接收的是UTF-8字符,如果在文件中给AJAX传递GB2312的参数,那就悲剧了,乱码无法避免。

为了使得在UBUNTU下创建的文件默认都是UTF-8编码的,我设置了LC_CTYPE="zh_CN.UTF-8"

方法是在 /etc/environment文件里添加 LC_CTYPE="zh_CN.UTF-8"。zh表示中文(拼音"zhongwen"),CN表示中国大陆(英语CHINA)。关于字符集,先说说UNICODE,UNICODE这个字符集使用四字节表示一个符号,但存储效率低;UTF-8和UNICODE类似,针对一些符号,使用比较少的字节进行编码。

设置之后,则若touch null.php;使用vi null.php并输入冒号及 set fileencoding可以查看文件的编码,比较奇怪的是,使用file --mime-encoding查看一个文件的字符集是无效的。在我的系统中,使用file命令查看一个含有中文字符的文件的字符集,结果将是iso-8859-1(此字符集不支持中文);而vi下使用set fileencoding能正确地显示UTF-8。

为了将以往的非UTF-8文件进行转码为UTF-8,我使用ICONV

对于使用其它编码的文件,可以使用iconv来转化成UTF-8格式。格式是,iconv -f 'gb2312' -t 'utf-8' file -o newfile 。

使secureCRT 和 putty 程序用UTF-8解析文件

secureCRT: 会话选项-->外观-->字符编码-->UTF-8

putty : 点左上角图标出现下拉列表--->点change settings-->点translation-->修改编码为UTF-8

使用SCREEN程序,在secureCRT 和putty下无法显示UTF-8的问题,修改.screenrc文件

去掉一下三行的注释

defutf8 on
defencoding utf-8
encoding utf-8 utf-8

但是,如果某个screen使用过程中断网,之后使用 -r 选项恢复这个screen,那么,此时,依旧无法显示UTF-8编码。目前还没有研究解决方法。


原创粉丝点击