代码之家  ›  专栏  ›  技术社区  ›  pgb

ASP.NET中的双字节数

  •  1
  • pgb  · 技术社区  · 17 年前

    我们正在开发一个日文本地化的网站。在该站点中,我们使用 asp:label 以及这样的控制。

    最近,我们被要求用“双字节字符”来显示数字。

    当我第一次认为这是客户的困惑时,他给我发了一封电子邮件:

    1234567890
    1234567890
    

    这表明我错了,而且确实有“更宽”的数字字符可用。

    有关于如何使ASP.NET动态切换到那些的提示吗?

    更新 :第二个示例似乎称为“全宽”字符。这个问题可以改为:

    当当前区域性为JP时,如何使ASP.NET自动显示全角数字?

    3 回复  |  直到 17 年前
        1
  •  2
  •   Jonathan Rupp    17 年前

    显然,Unicode中还有一些其他字符看起来像“普通”数字,但默认情况下显示得更宽。

    以下是问题的文本粘贴到记事本中,另存为Unicode,并贯穿XXD:

    0000000: fffe 3100 3200 3300 3400 3500 3600 3700  ..1.2.3.4.5.6.7.
    0000010: 3800 3900 3000 0d00 0a00 11ff 12ff 13ff  8.9.0...........
    0000020: 14ff 15ff 16ff 17ff 18ff 19ff 10ff 0d00  ................
    0000030: 0a00 0a                                  ...
    

    “1”似乎是0x0031,“特殊1”是0xff11。如果使用CSS来显示“普通”数字,但字体更宽不是一个选项,我想说您必须获取该数字,将其转换为字符串,在0x030和0x0039之间的每个字符中添加0xff10,以获得所需内容。

        2
  •  0
  •   i_am_jorf    17 年前

    你把字体宽度和 DBCS . 如果你只是想要一个更宽的字体,使用适当的CSS。如果您实际上希望支持Unicode并使用宽字符,则需要使用适当的数据类型实现后端。

    默认情况下,C中的所有字符串都是Unicode。您可以按照概述的技术控制编码 here .

        3
  •  0
  •   AnthonyWJones    17 年前

    以下是一个函数:

        static string IntToWideNumbers(int n)
        {
            char[] chars = n.ToString().ToCharArray();
            for (int i = 0; i < chars.Length; i++)
            {
                chars[i] = (char)((uint)chars[i] ^ 0xFF20);
            }
            return new String(chars);
        }