我们正在开发一个具有日语本地化的网站。在该网站中,我们使用asp:label
和此类控件显示多个动态字段。
最近,我们被要求使用“双字节字符”显示数字。
首先我认为这是客户的困惑,他在电子邮件中发给我了这个:
1234567890
1234567890
这表明我错了,确实存在“更宽”的数字字符。
有关如何动态切换到那些动态的任何提示吗?
更新:第二个示例似乎被称为“FULLWIDTH”字符。这个问题可以改为:
当当前文化是JP?
时,如何让ASP.NET自动显示FULLWIDTH数字?答案 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);
}