代码之家  ›  专栏  ›  技术社区  ›  Michael T

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

  •  9
  • Michael T  · 技术社区  · 15 年前

    好吧,我不做太多的.NET编程,但是我有一个需要维护的,所以这个问题的答案可能很明显。

    设置:

    • 安装了所有语言包的Windows 7 Ultimate
    • Visual Studio 2008 WinForms VB.NET项目。

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

    所以,我的问题是:

    winforms是utf-8还是其他字符编码? 是否有方法更改字符编码? 我应该更改日文窗体的字体,还是Windows更改? 这里的一般最佳实践是什么?

    我想知道我正在将字符正确地复制到表单中,并且我想能够测试它们。我该怎么做?

    感谢您的反馈!

    编辑 以下内容: 谢谢你的信息!这是我找到的。

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

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

    所以,我想使用默认字体,让Windows来处理它。我想我已经读过了,从XP开始的所有东西都能处理它。Windows 2000不会,这是一个遗憾,但我不知道应该使用什么字体,也不知道从vs中排除了什么字体。我不知道如何添加它,而不会收到关于受保护内存的大量错误消息。

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

    另外,我没有一个支持团队来为我做这些,但是我可以安装额外的Windows7副本,然后改为日语语言包并尝试运行它。但这成为了一个巨大的痛苦。我以为我读到了你可以在应用程序运行时更改语言,但这似乎不是真的。MS Docs会讨论如何执行此操作,但Windows7也会告诉您必须注销才能更改语言。

    Gothic女士似乎起作用了,它是vs 2008的一部分,但标题栏仍然是方形的。这真的很奇怪,因为WinForm中有相同的标志符号。这是因为标题栏字体是在系统级别设置的,而不是应用程序级别?

    抱歉这么多话。不确定这里是否还有问题。只是想把它全部弄出来,也许这能帮助其他人。

    3 回复  |  直到 10 年前
        1
  •  8
  •   Hans Passant    10 年前

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

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

    请注意,在启动日语版Windows的计算机上,这种字体问题不太可能是问题。当然,显示日文文本必须使用适当的字体。您可以通过msdn订阅获取特定语言版本的Windows。至少为您的QA人员准备一个这样他们就可以验证所有的工作都是正确的。

        2
  •  2
  •   Paul Sasik    15 年前

    这里有一个 great read 关于你的问题。

        3
  •  0
  •   msr    15 年前

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

    三年来,我一直在维护一个基于日语表单的应用程序(www.jbrute.com),它从mfc迁移到winforms,跨美国英语版本的xp、vista和win7迁移到wpf。它显示汉字、假名并使用输入法。没有任何悲伤。

    推荐文章