我的字符串包含日语(双角)和英语(单角)字符的混合:
string str = "女性love";
在C#中,我的方法必须将日语字符计为两列,将英语字符计为一列。所以上面的字符串应该会得到8列:
2 + 2 + 1 + 1 + 1 + 1 = 8
发布于 2011-07-26 19:53:59
也许你想要这样的东西,非常粗糙的东西,但通过稍微努力,你可以让它变得更好:
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
编码规范。点击这个链接Joel on Unicode并阅读整篇文章。特别是关于这个问题,这里是最重要的:
在
-8中,从0到127的每个码位都存储在一个字节中。只有128及以上的代码点使用2、3存储,实际上,最多6个字节
检查你的日语字母代码点,你就会找到一个为什么它返回10的答案。
编辑
请注意,此代码实际上将英文字母与"others“分开,而不仅仅是与日语字母分开。如果你只需要过滤日语,原因可能是你需要处理阿拉伯语、欧布拉语、俄语或其他任何语言,你需要知道日语字母表的代码限制。
致以问候。
发布于 2011-07-26 19:33:00
尝试如下所示:
int bCnt = System.Text.Encoding.UTF8.GetBytes(str).Length; //Select the appropriate encoding, if not UTF8
https://stackoverflow.com/questions/6835430
复制相似问题