文件编码问题:20161201php
这个问题是在开发中遇到的一个简单的小问题,本身也是第一次遇到。刚开始内心是很模糊的,彻底没有什么解决的方案。起初,我觉得是不一样的系统之间打开统一格式的文件会使用不一样的编码,因此,致使的乱码显示问题。不过,都是.txt的文本文件,在不一样的文本软件下打开倒是不一样的效果。好比在WINDOWS系统中打开是默认使用的ANSI编码打开,因此,不会出现任何编码问题。正常显示的,可是,当咱们把这个文本文件发送到UNIX系统,Mac系统下使用的时候,使用文本文件打开也是没有问题有题的,但,当咱们使用sumlime软件打开的时候,出现了乱码的问题。函数
科普一下:工具
ANSI编码通常指Windows-1252编码,是一个256个字符的字集的编码,每一个字符由一个字节表示。其中前128个字符(00-7F)和ASCII的7bits编码同样,后128个字符中有一些欧洲国家用的有重音的字符。ANSI编码在不一样语言的Windows下也指此语言下的Windows编码页,好比中文环境下指Windows-936(也就是GB2312),日文环境下是Windows-932(JIS)编码等等,也是前128个字符(00-7F)和ASCII的7bits编码同样,其余字符则由2个字节表示。编码
UTF-8是针对Unicode的可变长度字符编码,一个字符能够由1到4个字节表示,其中由一个字节表示的字符和ASCII的7bits编码同样,而包括中文在内的大部分字符则由3个字节表示。spa
因此若是文本里只有ASCII的7bits编码的那些,这两种编码是互相兼容没有区别的,可是对其余字符,编码就不一样了,并且Windows-1252编码没法表达除了256个字符外的好比中文字符,其余的ANSI编码如Windows-936也只能表示一部分Unicode中的字符。编码格式的不一样致使程序没法运行很容易理解,由于一样的字集在不一样的编码方式下表达的字符是不一样的或者是不能被表示的,除非是ASCII的7bits编码中的那些字符。code
解决办法:blog
为了可以在Mac系统下正常打开文件,把这个文件在Windows下使用记事本打开,而后选择“另存为” -》 选择“编码” -》“utf-8”。保存好以后再发送到Mac系统下,如今就可以正常显示啦。不过,我遇到的问题是:文件是使用程序生成的,默认的编码是ANSI编码,咱们想要使用的编码是utf-8编码。因此,在程序生成文件的时候,再使用程序把文件的编码方式转换为utf-8,这样就可以在各个平台正常的显示啦。utf-8
这里的编码转换程序,以前是在网上搜索到一个大牛写的一个工具类,能够实现各类编码之间的相互转换。不过,个人需求就只是把ansi编码转换成为utf8编码。因此,我就抽取了我须要的部分加入了个人程序中。开发
$str = iconv('GBK', 'UTF-8//IGNORE', $str);
以上是php代码,就是这一个简单的代码就能够实现个人需求了。实现思路就是把文件的内容一次性读入到字符串中,而后,转换为utf-8编码,再写入到文件中便可。字符串
国际化字符与编码支持
iconv 函数
iconv_get_encoding — 获取 iconv 扩展的内部配置变量
iconv_mime_decode_headers — 一次性解码多个 MIME 头字段
iconv_mime_decode — 解码一个MIME头字段
iconv_mime_encode — Composes a MIME header field
iconv_set_encoding — 为字符编码转换设定当前设置
iconv_strlen — 返回字符串的字符数统计
iconv_strpos — Finds position of first occurrence of a needle within a haystack
iconv_strrpos — Finds the last occurrence of a needle within a haystack
iconv_substr — 截取字符串的部分
iconv — 字符串按要求的字符编码来转换ob_iconv_handler — 以输出缓冲处理程序转换字符编码