MFC 丢失 Unicode 文本

Posted

技术标签:

【中文标题】MFC 丢失 Unicode 文本【英文标题】:MFC losing Unicode text 【发布时间】:2020-07-09 18:36:47 【问题描述】:

我有一个 MFC 对话框:

UNICODE 和 _UNICODE 已定义。

class VerifyComp : public CDialog

public:
  CString m_VerifyText;
  virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
;

void VerifyComp::DoDataExchange(CDataExchange* pDX)

  m_VerifyText = L"Ø2.0 X 4.1";
  pDx->m_bSaveAndValidate = 0;
  DDX_Text(pDX, IDC_VERIFY_TEXT, m_VerifyText);
  pDx->m_bSaveAndValidate = 1;
  DDX_Text(pDX, IDC_VERIFY_TEXT, m_VerifyText);

结果是 m_VerifyText == L"O2.0 X 4.1"; 我预计 m_VerifyText 没有改变。

我该如何解决这个问题?

【问题讨论】:

资源脚本是minimal reproducible example 的必需部分。请添加它的最小版本。 【参考方案1】:

导致问题的对话框 .rc 文件中有一个属性。

OEM 转换设置为真。它必须是假的。

【讨论】:

【参考方案2】:

您遇到的问题是,仅仅因为您有一个宽字符文字并不意味着文件本身可以处理 Unicode 字符。

要解决此问题,请使用 Unicode 字符集保存文件。转到文件->另存为,右键单击“保存”,选择“使用编码保存”,然后点击“是”。现在从编码列表中选择一个 Unicode 选项(我通常更喜欢带有签名的 utf-8)。

【讨论】:

以上是关于MFC 丢失 Unicode 文本的主要内容,如果未能解决你的问题,请参考以下文章

该文件含有unicode格式的字符,当文件保存为ANSI编码的文本文件时,该字符将丢失.

记事本里出现该文件含有Unicode格式的字符,当保存为ANSI编码的文本时,该字符将丢失。怎么回事啊??

UNICODE环境下读写txt文件操作

在 MFC windows 应用程序中删除 unicode

为啥记事本每次保存都说该文件含有unicode格式的字符?

Visual C++/MFC:让日文字符在没有 UNICODE 的情况下工作