asp.net中的双字节数字

asp.net中的双字节数字,asp.net,internationalization,Asp.net,Internationalization,我们正在开发一个具有日语本地化的网站。在该站点中,我们使用asp:label等控件显示几个动态字段 最近,我们被要求使用“双字节字符”显示数字 虽然我最初认为这是客户的困惑,但他给我发了一封电子邮件: 1234567890 1234567890 这表明我错了,确实有“更宽”的数字字符可用 有关于如何使ASP.NET动态切换到这些的提示吗 更新:第二个示例似乎被称为“全宽”字符。这个问题可以改为: 当当前区域性为JP时,如何使ASP.NET自动显示全宽数字?您混淆了字体宽度。如果您只想使用更宽的

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

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

虽然我最初认为这是客户的困惑,但他给我发了一封电子邮件:

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

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

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


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

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


默认情况下,C#中的所有字符串都是Unicode。您可以使用下面概述的技术来控制编码。

显然,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显示“普通”数字,但字体更宽不是一个选项,我会说您必须获取该数字,将其转换为字符串,在0x0030和0x0039之间的每个字符中添加0xff10,以获得所需内容。

以下是一个函数:-

    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);
    }
静态字符串intToWideNumber(int n)
{
char[]chars=n.ToString().toCharray();
for(int i=0;i
一开始我把他们弄糊涂了。但请看我贴的例子和下面的答案。是的,这是正确的。这些字符在Unicode文档中被称为全宽字符(至少我能找到)。你知道如何自动将asp:label转换成它吗?ControlAdapter可能是最干净的方法,因为我猜子类化label来处理这个问题是不可能的(从你对另一个答案的评论来看)。ControlAdapter看起来像是一种方法,但我现在使用的是asp.NET 1.1(此时无法迁移),可能是一个IHTTP模块,用于缓冲输出并对其进行搜索/替换?这样做是相当困难的,您必须确保使用足够智能的正则表达式,这样您就不会扩展任何HTML属性(只是内容),但理论上您应该能够做到这一点。“不干净,但很好,”你问。@Jonathan:我认为IHttpModule是答案,但我会向流的输出链中注入流。使用状态引擎检测应替换哪些数字字符。只要输出编码是unicode,并且不应该有任何危险的内容大小被修改(尽管我不确定这是一个大问题),我正在寻找一种自动的方法来实现这一点。我的网站充满了显示不同动态内容的不同asp:label。有些包含文本和一些数字(主要是定价信息和日期)。我只需要翻译日文版本中的标签,而不影响其他版本。我知道我可以运行这段代码并检查当前的文化,但我实际上正在寻找一个更自动化的解决方案。这是一个要求,离规范太远了,无法“自动”完成。