asp.net中的双字节数字

时间:2009-04-27 20:02:41

标签: asp.net internationalization

我们正在开发一个具有日语本地化的网站。在该网站中,我们使用asp:label和此类控件显示多个动态字段。

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

首先我认为这是客户的困惑,他在电子邮件中发给我了这个:

1234567890
1234567890

这表明我错了,确实存在“更宽”的数字字符。

有关如何动态切换到那些动态的任何提示吗?

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

当当前文化是JP?

时,如何让ASP.NET自动显示FULLWIDTH数字?

3 个答案:

答案 0 :(得分:2)

显然,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,'special 1'是0xff11。如果使用CSS显示“正常”数字,但是使用更宽的字体不是一个选项,我会说你必须取数字,将其转换为字符串,将0xff10添加到0x0030和0x0039之间的每个字符得到你想要的东西。

答案 1 :(得分:0)

您将字体宽度与DBCS混淆。如果您只想要更宽的字体,请使用适当的CSS。如果您确实想要支持unicode并使用宽字符,则需要使用适当的数据类型来实现后端。

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

答案 2 :(得分:0)

这是一个功能: -

    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);
    }