问题起因: 需要输出一个字符串长度

var s = "❤";
console.log(s.length); //期待输出1,实际输入为2

这是针对这种问题的一个js解决方案,描述了如何正确输出含有该种类型字符的字符串长度。这是关于字符集和unicode的一个基础教程。

如果是flash里面,那as3怎么处理?发现一个简单的方法(之前考虑将那个教程中的js方法转换成as3, 但是Array.from这个方法不太容易转换成as3),使用flash的FTE框架中的TextLine类中的atomCount属性来获取正确的字符数(FTE就是flash里面处理文本显示和布局的一个框架,一般不太使用,经常使用的是TextField类)。

var anchor:String = "❤❤❤❤❤❤❤";
trace(anchor.length); //期待输出7,实际输出14

function getLengthFor(str:String):int {
    var textBlock:TextBlock = new TextBlock();
    var fontDescription:FontDescription = new FontDescription();
    var format:ElementFormat = new ElementFormat(fontDescription, 12);
    var textElement:TextElement = new TextElement(str, format);
    textBlock.content = textElement;
    var textLine:TextLine = textBlock.createTextLine();
    return textLine.atomCount;
}
trace(getLengthFor(anchor)); //输出7