谈谈c#中 全角 半角 汉字 大小写字母的宽度 及中英文混合字符串对齐的方法

从字节方面来说,全角占两个字节,半角占一个字节.

汉字和汉语的标点符号是占用两个字节的,所以汉字是全角的.

而英文字母和数字是占用一个字节的,所以他们是半角的.例如abcd123

这样说法其实有个问题. 例如下面的字符

AabB1234@#$%^&*;,。:

他们是英文字母和数字以及字符,但是他们是占用两个字节的,所以他们是全角的.

全角的字符和汉字占用的宽度都是一样的

而半角虽然在内存中都是占用一个字节,但是他们在屏幕上显示时占用的宽度是不一样的.

同是大写字母,占用的也不一样 比如M和F 同是小写字母也是不一样的    比如w和i

所以在中英文混合字符串对齐时 也会出现一些问题

比如 字符串1=冯1W 占用了4个字节      字符串2=冯1a 占用了4个字节

虽然他们占用的字节一样,但是在屏幕显示时 宽度是不一样的.

目前最好的办法也只能是计算字符串的字节,按照字节长度补全.

错误的办法是按照字符串的字符数量补全.

下面是c#的一个扩展方法.用于右对齐的补全.但是还是不完美

public static string PadRightEx(this string str, int totalByteCount, char c = ' ')
{
   int dcount = Encoding.GetEncoding("gb2312").GetBytes(str).Length;
   string w = str.PadRight(totalByteCount - dcount, c);
   return w + dcount;
}

使用结果 如下图

如果哪位同学有完美的方法,请不吝赐教

posted @   simadi  阅读(2184)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示