如何计算日英混合字符串所需的列数?

时间:2011-07-26 19:29:17

标签: c# string character-encoding string-length

我的字符串包含日语(双倍宽度)和英语(单宽)字符的混合:

string str = "女性love";

在C#中,我的方法必须将日文字符计为两列,将英文字符计为一列。 所以上面的字符串应该给我一个8列:

2 + 2 + 1 + 1 + 1 + 1 = 8

2 个答案:

答案 0 :(得分:3)

Probbaly你想要这样的东西,非常粗糙的东西,但通过稍微努力,你可以使它更好:

    string str = "女性love";
    int iTotal = 0;

    str.ToList().ForEach(ch=>{
        int iCode = ch;
        if(iCode>= 65 && iCode <= 122)
            iTotal++;
        else 
            iTotal +=2;
    });

//65 is 'a', 122 is 'z'.  iTotal = 8 //in this case

现在为什么System.Text.Encoding.UTF8.GetBytes(str).Length返回10,它只会导致UTF8 ecoding规范。请点击此链接Joel on Unicode并阅读整篇文章。特别是这里有关于这个问题的最重要的东西:

  

在UTF-8中,0-127的每个代码点都存储在一个字节中。   仅使用2,3存储代码点128及以上,实际上最多为6   字节

检查您的日语字母代码点,然后您将找出为什么它返回10的aswer。

修改

请注意,此代码实际上将英文字母与“其他”分开,而不是仅从日文字母。如果你只需要过滤日语,可能需要处理阿拉伯语,Ebraic,俄语或其他什么,你需要知道 limits ,在代码方面,日语字母。

问候。

答案 1 :(得分:2)

尝试这样的事情:

int bCnt = System.Text.Encoding.UTF8.GetBytes(str).Length; //Select the appropriate encoding, if not UTF8