Visual C++/MFC:让日语字符在没有 UNICODE 的情况下工作
Visual C++/MFC: getting Japanese characters to work without UNICODE
我的软件最初是 20 年前在 Visual C++ 中使用不带 UNICODE 的 MFC 开发的。目前,字符串保存在 char[] 或 CString 中,它在英语和日语 Windows PC 上工作,直到使用日语字符,因为这些往往会转换为奇怪的字符或空框。
设置 UNICODE 大概是前进的方向,但需要大量的代码更改,而很多似乎只是通过将系统区域设置设置为日本(在“Window 非 Unicode 程序的语言中“ 环境)。我不知道 Windows 是如何做到这一点的,但是一些日文字符现在可以在我的英文 Windows PC 上使用,例如我可以在不更改代码的情况下打开和保存日文文件名。在日本,他们将 System Locale 设置为英语,并且同样有效,但不是全部。
我的印象是问题是由于使用了不包含日语字符的字体。目前我使用的是 Arial / MS Sans Serif,字符集设置为 ANSI_CHARSET 或 DEFAULT_CHARSET。我应该使用不同的字体吗,或者我可以扩展这些字体以包含日语字符吗?还是我找错了树,在这种情况下我下一步该怎么做?不幸的是,我对这一切都很陌生……
这是一个常见的问题(好吧,我想在 2015 年不再那么常见了,幸运的是,MBCS 程序是一个垂死的品种 - 虽然我仍然保留几个...)
无论哪种方式,恐怕根据您对 'working' 的定义,要使其正常工作,您必须硬着头皮转换为 Unicode 版本。如果您不能为此制定业务案例,那么您将必须设置正确的语言环境(好吧,更糟糕的是,让用户设置 'right' 一个)并测试哪些有效,哪些无效,以及就没有的问题提出更具体的问题。
如果您的目标是制作一个应用程序,无论计算机上的区域设置如何,都能以 'right' 方式正确显示各种编码的字符串,并且在没有用户的情况下与每个输入数据集/数据库内容兼容必须注意编码问题,那么您的 MBCS 构建就不走运了。
很可能不是字体缺失字符的问题。在你进一步 and/or 提出更多问题之前,你应该阅读 http://www.joelonsoftware.com/articles/Unicode.html,再读一遍,睡一觉,再读一遍 ,向其他人解释什么'encoding'、'locale'、'character set'、'font'和'Unicode code point'之间的关系,因为只有你做到了,你才能决定如何进行你的申请。抱歉,这不是您想听到的,但如果您的任务是处理国际化,这就是现实。
我的软件最初是 20 年前在 Visual C++ 中使用不带 UNICODE 的 MFC 开发的。目前,字符串保存在 char[] 或 CString 中,它在英语和日语 Windows PC 上工作,直到使用日语字符,因为这些往往会转换为奇怪的字符或空框。
设置 UNICODE 大概是前进的方向,但需要大量的代码更改,而很多似乎只是通过将系统区域设置设置为日本(在“Window 非 Unicode 程序的语言中“ 环境)。我不知道 Windows 是如何做到这一点的,但是一些日文字符现在可以在我的英文 Windows PC 上使用,例如我可以在不更改代码的情况下打开和保存日文文件名。在日本,他们将 System Locale 设置为英语,并且同样有效,但不是全部。
我的印象是问题是由于使用了不包含日语字符的字体。目前我使用的是 Arial / MS Sans Serif,字符集设置为 ANSI_CHARSET 或 DEFAULT_CHARSET。我应该使用不同的字体吗,或者我可以扩展这些字体以包含日语字符吗?还是我找错了树,在这种情况下我下一步该怎么做?不幸的是,我对这一切都很陌生……
这是一个常见的问题(好吧,我想在 2015 年不再那么常见了,幸运的是,MBCS 程序是一个垂死的品种 - 虽然我仍然保留几个...)
无论哪种方式,恐怕根据您对 'working' 的定义,要使其正常工作,您必须硬着头皮转换为 Unicode 版本。如果您不能为此制定业务案例,那么您将必须设置正确的语言环境(好吧,更糟糕的是,让用户设置 'right' 一个)并测试哪些有效,哪些无效,以及就没有的问题提出更具体的问题。
如果您的目标是制作一个应用程序,无论计算机上的区域设置如何,都能以 'right' 方式正确显示各种编码的字符串,并且在没有用户的情况下与每个输入数据集/数据库内容兼容必须注意编码问题,那么您的 MBCS 构建就不走运了。
很可能不是字体缺失字符的问题。在你进一步 and/or 提出更多问题之前,你应该阅读 http://www.joelonsoftware.com/articles/Unicode.html,再读一遍,睡一觉,再读一遍 ,向其他人解释什么'encoding'、'locale'、'character set'、'font'和'Unicode code point'之间的关系,因为只有你做到了,你才能决定如何进行你的申请。抱歉,这不是您想听到的,但如果您的任务是处理国际化,这就是现实。