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

C# 如何计算日英混合字符串所需的列数?,c#,string,character-encoding,string-length,C#,String,Character Encoding,String Length,我的字符串包含日语(双宽度)和英语(单宽度)字符的混合: string str = "女性love"; 在C#中,我的方法必须将日语字符计算为两列,将英语字符计算为一列。 所以上面的字符串应该给我一个8列: 2 + 2 + 1 + 1 + 1 + 1 = 8 试着这样做: int bCnt = System.Text.Encoding.UTF8.GetBytes(str).Length; //Select the appropriate encoding, if not UTF8 很可能你

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

string str = "女性love";
在C#中,我的方法必须将日语字符计算为两列,将英语字符计算为一列。 所以上面的字符串应该给我一个8列:

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

试着这样做:

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

很可能你想要这样的东西,非常粗糙,但只要稍加努力,你就能做得更好:

    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
string str=”女性“爱”;
int-iTotal=0;
str.ToList().ForEach(ch=>{
int-iCode=ch;

如果(iCode>=65&&iCode什么算“英语”字符,确切地说?重音字符呢?你没有合适的
编码方法吗?
你可以使用吗?大概你需要在某个时候将字符串实际表示为字节……他可能指的是字母,而不是亚洲字符,但请注意,一些亚洲字符集实际上包含双宽度字母。是的,它是关于双倍宽度字符的计数,相当于两个单倍宽度字符。你不是真的要求“列”的数量而不是“字节”的数量吗?@dan04“列”听起来像是正确的术语。我只是没有意识到。我会相应地编辑我的问题。我尝试了所有编码,但无法得到8。ASCII给出6,BigEndianUnicode给出12,Unicode给出12,UTF32给出24,UTF7给出12,UTF8给出10。@JellyAma,你是在问使用哪种编码,还是只是在列举可用的选项?只有你自己可以知道应用程序使用的编码。如果您接受“默认值”,这很可能是编码。Unicode。我刚才说,基于编码简单地计算字节似乎不起作用,因为结果必须是8。这是因为UTF最接近您要查找的内容,而且,我认为,两个日语字符实际上每个包含3个字节。为什么计数必须是8?您确定f前两个字符每个是两个字节?它们很可能占用3个字节,但我的方法必须将它们计为2个字节,因为它们是双幅字符。就是这样!实际上这满足了我的特殊需要:str.ToList().ForEach(ch=>{int iCode=ch;if(iCode<128)iTotal++;else iTotal+=2;});非常感谢。好吧,这会迫使伯爵成为OP想要的,但这真的是他需要的吗?我的问题是,他怎么能如此确定日语字符是“双幅”的?他的例子似乎与我所知道的任何编码格式都不匹配。@Jelly:不客气。顺便说一句,读一篇文章,真的很好。@RLH:你说得对,但可能他不需要任何编码,他只是想把英语Leter与其他人分开。实际上我会编辑一篇评论。