【发布时间】:2015-08-17 15:19:34
【问题描述】:
我的软件最初是在 20 年前使用没有 UNICODE 的 MFC 使用 Visual C++ 开发的。目前字符串保存在 char[] 或 CString 中,它可以在英语和日语 Windows PC 上工作,直到使用日语字符,因为这些往往会转换为奇怪的字符或空框。
设置 UNICODE 可能是前进的方向,但需要大量更改代码,而只需将系统区域设置设置为日本(在“非 Unicode 程序的 Window 语言”设置中),似乎很多工作。我不知道 Windows 是如何做到这一点的,但是一些日文字符现在可以在我的英文 Windows PC 上运行,例如我无需更改代码即可打开和保存日文文件名。在日本,他们将 System Locale 设置为英语并再次进行了很多工作,但并非全部。
我觉得问题是由于使用了不包含日文字符的字体造成的。目前我正在使用 Arial / MS Sans Serif 并将字符集设置为 ANSI_CHARSET 或 DEFAULT_CHARSET。我应该使用其他字体吗,或者我可以扩展这些字体以包含日文字符吗?或者我是在吠叫错误的树,在这种情况下我下一步该怎么做?不幸的是,我对这一切都很陌生……
【问题讨论】:
-
自 Windows NT 以来,Windows 本身就是 Unicode。这意味着非 unicode 程序使用 MultiByteCharactersSets 并且这些字符在内部被转换为它们的 unicode 等效项以进行显示。因此,如果您使用的字体不显示您使用的所有字符,您将得到正方形而不是预期的字符。但问题也可能是由错误的语言 ID 引起的。如果没有minimal reproducible example,就很难猜出问题出在哪里...
标签: c++ visual-studio unicode mfc glyph