Posts Tagged ‘编码’

vim编码

Posted by 机器人 on 12th 五月 2009 in vim

1.在vim中,查看当前文件编码格式

:set fileencoding

2.转换文件编码

:set fileencoding=utf-8

3.iconv转换编码

~@bash iconv -f gbk -t utf-8 gbk.txt > utf-8.txt

4.乱码解决方法
在.vimrc中添加如下代码

set fileencodings=utf-8,cp936,big5,euc-jp,euc-kr,latin1,ucs-bom
set fileencoding=utf-8

参考:http://blog.163.com/qj_l12@126/blog/static/3593082620089710462888/

机器人 2009-05-12 17:46 于 北京

php怎么将字符转换成特定编码

Posted by 机器人 on 5th 一月 2009 in php/javascript

当我们在接受未知客户端提交的数据,由于各客户端的编码不统一,但在我们的服务器端最终只能以一种编码方式来处理,这种情况下就会涉及到一个将接受到的字符转换为特定编码的问题。

这时可能会想到直接用iconv来进行转码,但我们知道,iconv这个函数需要提供的两个参数为输入编码和输出编码,而我们现在根本不知道接受的字符串是什么编码,如果这个时候能得到接收字符是什么编码就好了。
对于这样的问题,一般会有两种解决方案。
方案一:
要客户端提交数据时,指定所提交的编码,这时就需要多给一个用来指定编码的变量。

$string = $_GET['charset'] === 'gbk' ? iconv('gbk','utf-8',$_GET['str']) : $_GET['str'];

对于这种情况,如果在没有约定或者我们不能控制客户端的情况下,似乎这种方案使用不是很好。
方案二
直接由服务器端来检测所接收的数据编码。
这种方案当然是最理想了的了,现在问题是怎么检测一个字符的编码吗?对于这种情况,在php里,mb_string这个扩展中的mb_check_encoding提供了我们所需要的功能。

$str = mb_check_encoding($_GET['str'],'gbk') ? iconv('gbk','utf-8',$_GET['str']) : $_GET['str'];

但这需要打开mb_string这个扩展,有些时候可能我们的生产服务器中没有打开这个扩展。对于这种情况,需要自己借助如下函数来判断编码。
以下函数非本人所写

function isGb2312($string) {
	for($i=0; $i 127) {
			if( ($v >= 228) && ($v < = 233) )
			{
				if( ($i+2) >= (strlen($string) - 1)) return true;
				$v1 = ord( $string[$i+1] );
				$v2 = ord( $string[$i+2] );
				if( ($v1 >= 128) && ($v1 < =191) && ($v2 >=128) && ($v2 < = 191) )
					return false;
				else
					return true;
			}
		}
	}
	return true;
}
function isUtf8($string) {
	return preg_match('%^(?:
	[\x09\x0A\x0D\x20-\x7E] # ASCII
	| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
	| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
	| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
	| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
	| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
	| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
	| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
	)*$%xs', $string);
}

这里我们就可以使以上任何一个函数来实现编码的检测。并将其转换成指定的编码。

$str = isGb2312($_GET['str'],'gbk') ? iconv('gbk','utf-8',$_GET['str']) : $_GET['str'];

机器人 2008-01-05 22:18 于 北京