使用 php读取文件3.txt,却出现了乱码问题,d:/3.txt是utf-8文件。代码:
复制代码
有bom问题,微软为了标记这个文本为utf文本,加入三个字节,分别为:ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191以上代码是删除bom的php代码。
截取时可以从第四位开始截取。如果从第一、二、或者第三位截取,可能会出现乱码。utf-8编码中一个汉字可能会使用三个字节表示。如果有汉字,不要使用ansi编码,否则读取的时候会出现乱码。
ansi编码 (百科里面的)
unicode和ansi都是字符代码的一种表示形式。为使计算机支持更多语言,通常使用 0x80~0xff 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xd6,0xd0] 这两个字节存储。不同的国家和地区制定了不同的标准,由此产生了 gb2312, big5, jis 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ansi 编码。在简体中文系统下,ansi 编码代表 gb2312 编码,在日文操作系统下,ansi 编码代表 jis 编码。
不同 ansi 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ansi 编码的文本中。
如果是英文或符号那么编码为1个字节,而且最高位为0,如果是中文那么最高位肯定为1,大小为2个字节。 由此看来,如果在我们的中文电脑中存储ansi的文本文件中如果有日语或者韩语的时候,有可能造成编码的冲突,也就是说我们不可能在记事本中用ansi编码存储中日韩的混合文字。电脑中的记事本是针对中文版系统开发的。如果想通用的话,就得把txt文件存储成unicode格式的文本文件。所以,如果想做国际化的东西,还是用unicode方便。其实,现在的操作系统大部分都是用unicode编码的,如果我们使用的是ansi编码,那么系统内部处理的时候还是得转换成unicode,反而造成代码效率低了。还是用unicode方便啊!
php的乱码问题代码:
复制代码
出现了乱码问题。
加上 header(content-type:text/html;charset=utf-8);就可以了。
用来设置html 编码格式是utf-8
乱码的解决看三个地方:1、数据库编码2、页面编码3、连接编码
如果这三个地方都是一致的,就不会出现乱码问题。