如何计算一个日语-英语混合字符串所需的列数

本文关键字:混合 字符串 英语 日语 计算 何计算 一个 | 更新日期: 2023-09-27 18:03:42

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

string str = "女性love";

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

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

如何计算一个日语-英语混合字符串所需的列数

也许你想要这样的东西,非常粗糙的一个,但通过一些工作,你可以使它变得更好:

    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编码规范的原因。点击这个关于Unicode的链接,阅读整篇文章。关于这个问题,下面是最重要的一点:

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

检查你的日语字母代码点,你会发现为什么返回10的答案。

编辑

请注意,这个代码实际上是将英文字母与"others"分开,而不是只将与日文分开。如果你只需要过滤日语,因为你可能需要处理阿拉伯语,巴西语,俄语或其他什么,你需要知道限制,在代码方面,日本字母。

问候。

试试这样:

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