【问题标题】:Cyrillic alphabet in Multibyte多字节中的西里尔字母
【发布时间】:2023-03-08 02:37:01
【问题描述】:

我对使用 C++ 很陌生。我有一个 MFC 项目,需要翻译成俄语

如果我将 MFC 设置更改为 Unicode,它会正确显示。我的问题是:

是否可以使用 Multibyte 打印西里尔字母?如果有,怎么做?

谢谢大家!

【问题讨论】:

  • 你的问题的答案:有可能。
  • 感谢辩证法。您有文档的示例或页面吗?这是我第一次使用非拉丁字符。
  • 不,但你应该问一个正确的问题。而不是“是否可能”,您应该问“如何”。我们不能确定您在询问前者时是否暗示后者。另外,为什么不直接使用 Unicode?你说它有效,所以就用它吧。
  • 对不起,以后有问题我会说的更具体更仔细。队友说我最好不要使用 Unicode,因为它会引发很多错误,但我想最好使用 Unicode。
  • 呃,如果队友告诉你不要使用Unicode,因为他们不知道如何使用Unicode,你最好找一个像样的项目。那个显然不是。

标签: c++ unicode mfc cyrillic


【解决方案1】:

我鼓励您使用 Unicode(更准确地说:MFC/Visual Studio 设置中的 UTF-16)构建您的 MFC 应用程序,正如您所写 “如果我将 MFC 更改为 Unicode它显示正确。”

同时,您仍然可以使用其他编码,例如UTF-8 用于您的西里尔文文本,并将其存储在 CStringAstd::string 对象中。然后,您可以在“MFC 边界”处在 UTF-8 和 UTF-16 之间进行转换,例如在对话框或其他应用程序窗口上显示文本时。

您可以使用一些ATL/MFC conversion helpers,或编写您自己的转换代码来调用Windows API,如MultiByteToWideCharWideCharToMultiByte,为转换指定正确的“代码页”(例如CP_UTF8 用于UTF-8 编码文本)。

您可能会发现this MSDN article on Unicode encoding conversions 也很有帮助。

另一方面,如果您想使用特定代码页(例如 1251 Windows Cyrillic)而不是 UTF-8,那么您仍然可以使用 MultiByteToWideChar 将文本从代码页转换为 Unicode UTF-16,指定正确的code page identifier

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 2018-06-02
    • 2014-09-11
    • 1970-01-01
    相关资源
    最近更新 更多