[转]utf8 与 utf-8的差异就是一个汉字占 2字节 与 3字节的区别

[转]utf8 与 utf-8的区别就是一个汉字占 2字节 与 3字节的区别
http://bbs.9ria.com/viewthread.php?tid=72036&extra=page%3D1%26amp;orderby%3Ddateline%26amp;filter%3D172800


今天在用bytearray时偶然发现一个问题:"一个汉字占3个字节"。而我清晰的记得原来在学java时说的是一个汉字占俩个字节。直到发现这个问题前我都是这么“以为”的。
我简单的写下代码:

var defaultEncoding:String = "utf-8";
var headStr:String = "头信息";
var ba:ByteArray = new ByteArray();
ba.writeMultiByte(headStr, defaultEncoding);
trace("headDatalength:", ba.length);
trace(getHeadData(ba));



getHeadData(ba)这个方法是我把read方法封装了,这里就先不解释了。
看看打印的结果:
headDatalength: 9
头信息
明明3个字,却占了9个字节。于是我Baidu,google下,发现了一篇文章《AS3 Socket 汉字乱码深入研究》(http://happear.iteye.com/blog/714928
我觉得这篇文章很好,所以就把链接也发上来了,一起学习学习)。
他的例子用的编码是:“utf8”;(他是这么写的!!!)
我就试着把var defaultEncoding:String = "utf-8";(我习惯这么写)
该写成了 var defaultEncoding:String = "utf8"; 只有一个“-”的区别。
区别不大可影响力不小。
看看这次打印的结果:
headDatalength: 6
头信息
现在我在回想原来写代码为什么老有乱码的问题,很有可能在这里出过问题(当然其他可能出现的问题你能从网上搜到,解决办法有的是,我只是希望没有注意过这里的童鞋们,能留意下)。真可以说是一个“-”引发的血案。
所以我就觉得,如果你想用UTF编码的话 最好用byteArray的 writeUTF 或者 writeUTFBytes方法。省的因为习惯问题在合作开发中产生不必要的麻烦。