计算外语中的字符数

Str*_*ger 7 javascript character-encoding

是否有任何最佳方法来实现非英文字母的字符数?例如,如果我们用英语单词"Mother",那就是一个6个字母的单词.但是如果你在泰米尔语中键入相同的单词(மதர்),它是一个三个字母的单词(ம+த+ர்),但最后一个字母(ர்)将被系统视为两个字符(ர+ஂ=ர்).那么有没有办法计算真实角色的数量?

一个线索是,如果我们将键盘中的光标移动到单词(மதர்)中,它将仅通过3个字母而不是系统考虑的4个字符,那么有没有办法通过使用它来找到解决方案?任何有关这方面的帮助将不胜感激......

Mor*_*ler 8

更新

从午餐回来=)我担心以前用任何外语都不能很好地工作所以我添加了另一个小提琴可能的方式

var UnicodeNsm = [Array 1280] //It holds all escaped Unicode Non Space Marks
function countNSMString(str) {
    var chars = str.split("");
    var count = 0;
    for (var i = 0,ilen = chars.length;i<ilen;i++) {
      if(UnicodeNsm.indexOf(escape(chars[i])) == -1) {
        count++;
       }
    }
    return count;
}

var English = "Mother";  
var Tamil = "????";
var Vietnamese = "m?"
var Hindi = "???"

function logL (str) {    
      console.log(str + " has " + countNSMString(str) + " visible Characters and " + str.length + " normal Characters" ); //"???? has 3 visible Characters"
}

logL(English) //"Mother has 6 visible Characters and 6 normal Characters"
logL(Tamil) //"???? has 3 visible Characters and 4 normal Characters"
logL(Vietnamese) //"m? has 2 visible Characters and 3 normal Characters"
logL(Hindi) //"??? has 1 visible Characters and 3 normal Characters"
Run Code Online (Sandbox Code Playgroud)

所以这只是检查字符串中的任何字符是否是Unicode NSM字符,并忽略了这个的计数,这应该适用于大多数语言,而不仅仅是泰米尔语.并且具有1280个元素的数组不应该是那么大的性能问题

这是一个包含Unicode NSM的列表 http://www.fileformat.info/info/unicode/category/Mn/list.htm

这是相应的JSBin


在用字符串操作进行实验后,结果 String.indexOf返回相同的

"??""?" 意义,
"????".indexOf("??") == "????".indexOf("?" + "?") //true
"????".indexOf("?") == "????".indexOf("?" + "?")//错误

我借此机会尝试了这样的事情

//??

var char = "?????????";
var char2 = "??????????";    
var char3 = "???????????";

function countStr(str) {
         var  chars = str.split("");
         var count = 0;
          for(var i = 0, ilen = chars.length;i<ilen;i++) {
                 var chars2 = chars[i] + chars[i+1];   
                 if (str.indexOf(chars[i]) == str.indexOf(chars2))
                   i += 1;
               count++;
            }
         return count;
 }


console.log("--");

console.log(countStr(char)); //6

console.log(countStr(char2)); //7

console.log(countStr(char3)); //7
Run Code Online (Sandbox Code Playgroud)

这似乎适用于上面的String,它可能需要一些调整,因为我不知道关于编码和东西的事情,但也许它可以开始的一点

继承人JSBin