首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算日英混合字符串所需的列数?

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

Stack Overflow用户
提问于 2011-07-27 03:29:17
回答 2查看 1.4K关注 0票数 2

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

代码语言:javascript
运行
复制
string str = "女性love";

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

代码语言:javascript
运行
复制
2 + 2 + 1 + 1 + 1 + 1 = 8
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-27 03:53:59

也许你想要这样的东西,非常粗糙的东西,但通过稍微努力,你可以让它变得更好:

代码语言:javascript
运行
复制
    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“分开,而不仅仅是与日语字母分开。如果你只需要过滤日语,原因可能是你需要处理阿拉伯语、欧布拉语、俄语或其他任何语言,你需要知道日语字母表的代码限制。

致以问候。

票数 3
EN

Stack Overflow用户

发布于 2011-07-27 03:33:00

尝试如下所示:

代码语言:javascript
运行
复制
int bCnt = System.Text.Encoding.UTF8.GetBytes(str).Length; //Select the appropriate encoding, if not UTF8
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6835430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档