String

進行字元計數,將表情符號計數為 2

  • August 5, 2018

我有以下功能:

function getCharacterCount(string str) constant
returns (uint length)
{
   uint i=0;
   bytes memory string_rep = bytes(str);

   while (i<string_rep.length)
   {
       if (string_rep[i]>>7==0)
           i+=1;
       else if (string_rep[i]>>5==0x6)
           i+=2;
       else if (string_rep[i]>>4==0xE)
           i+=3;
       else if (string_rep[i]>>3==0x1E)
           i+=4;
       else
           //For safety
           i+=1;

       length++;
   }
}

現在它完全適用於所有 utf-8 字元串,因此getCharacterCount(test1234)返回 8,但getCharacterCount(test1234😂)在我希望它返回 10 的地方返回 9。我找不到任何可行的解決方案來解決這個問題。

您為每個字元添加一次長度,因此無論哪種情況代表表情符號,您都需要length++;在這種情況下以及最終使用length++;

編輯:

使用 else if (string_rep[i]>>3==0x1E) { i+=4; length++; } 對我有用。

引用自:https://ethereum.stackexchange.com/questions/55868