zoukankan      html  css  js  c++  java
  • 谈谈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;
    }

    使用结果 如下图

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

  • 相关阅读:
    unity 颜色空间
    Shader 常用常量 函数等
    Unity3d cg Shader 相关的方法
    DirectX HLSL Shader 内置函数
    unity texture2d 图片尺寸压缩
    Unity中Zxing生成二维码只能生成256大小图片的解决方案
    读取保存 调用系统选框 仅限Win/Mac/WebGL
    Unity编辑器中递归设置文件夹下资源的 AssetBundle Tag 可多选
    扣绿幕Shader(可自选颜色)
    智能手环体验:UP24
  • 原文地址:https://www.cnblogs.com/simadi/p/3101237.html
Copyright © 2011-2022 走看看