.NET本地化:日文字符显示为正方形

时间:2010-01-18 15:31:33

标签: vb.net winforms unicode localization internationalization

好的,我没有做太多.Net编程,但我确实有一个我维护的,所以答案可能很明显。

设定:

  • 安装了所有语言包的Windows 7旗舰版
  • Visual Studio 2008 Winforms VB.Net项目。

我正在本地化这个项目,当我制作日文版的表格时,字符显示为正方形,尽管它们在我的浏览器中正确呈现。我猜这是因为默认字体没有这些字符的字形。

所以,我的问题:

winforms是UTF-8还是其他一些字符编码? 有没有办法改变字符编码? 我应该更改日语表单的字体,还是Windows会这样做? 这里的一般最佳做法是什么?

我想知道我正在将字符正确地复制到我的表单中,我希望能够测试它们。我怎么能这样做?

感谢您的反馈!

修改: 谢谢(你的)信息!这是我发现的。

Arial Unicode MS确实拥有所有字形,但我没有使用它,因为它不在VS2008字体列表中。我手动编辑了字体框以使用它,但随后Visual Studio会抛出消息“尝试读取或写入受保护的内存。这通常表明其他内存已损坏。”我猜这是因为VS由于某种原因没有访问该字体的权限。我回到默认字体,可怕的错误消息消失。

然后,即使使用Arial Unicode MS,文本也会在表单标题中呈现为块。相同的文字在标签中正确呈现。

所以,我想我想使用默认字体,让Windows处理它。我想我已经读过XP上的所有东西都会处理它。 Windows 2000不会,这是一个耻辱,但什么,我不知道我应该使用什么字体,以及它排除在VS之外的任何字体。我不知道如何添加它而不会收到大量有关受保护内存的错误消息。

现在问题是,调整表单中的标签大小,因为翻译的文本通常更大。

此外,我没有支持团队为我这样做,但我可以安装额外的Windows 7副本,并更改​​为日语语言包并尝试运行它。但这成了一个主要的痛苦。我以为我读过你可以在应用程序运行时更改语言,但这似乎不是真的。 MS文档讨论了如何执行此操作,但Windows 7还告诉您必须注销才能更改语言。

MS Gothic似乎有效,它是VS 2008的一部分,但标题栏仍然是正方形。这真的很奇怪,因为相同的字形在winform中。这是因为标题栏字体是在系统级别而不是应用程序级别设置的?

很抱歉罗嗦。不确定这里是否有问题。只是试图全力以赴,所以也许这会帮助其他人下线。

3 个答案:

答案 0 :(得分:8)

任何.NET代码(包括Windows窗体)都使用Unicode编码为UTF16。您的问题不太可能是编码问题,会产生问号而不是方块。获得正方形表示您使用的字体缺少显示日语字符所需的字形。

您可以使用charmap.exe小程序找出您使用的字体支持的字形。如果它们丢失了,那么操作系统将被迫回退到替代字体,当它找不到时会失败。然后显示正方形就可以做到。旧操作系统版本很可能是造成这种事故的原因,特别是对于没有安装可选东亚字体的XP。

请注意,在启动日语版Windows的计算机上,此字体问题不太可能成为问题。它当然需要正确的字体才能显示日文。您可以通过MSDN订阅获取Windows的特定语言版本。至少为你的QA工作人员准备一个,以便他们可以验证一切正常。

答案 1 :(得分:2)

这是来自Joel Spolsky的问题的great read

答案 2 :(得分:0)

为了清楚起见,您是否安装了语言支持:控制面板/区域选项/显示语言。大概你在源代码中有日文文本。您将源代码保存为某种Unicode,对吧?

3年来,我一直在维护一个基于日语表单的应用程序(www.jbrute.com),该应用程序从MFC迁移到WinForms到WPF,跨越美国英语版本的XP,Vista和Win7。它显示汉字,假名和使用IME。没有任何悲伤。