gpt4 book ai didi

c++ - 如何在非 unicode C++ 环境中获取和传递阿拉伯字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:34 27 4
gpt4 key购买 nike

我目前正在开发一个用 C++ 编写并使用带有 MS Access 后端的 True OLE DBGrids 的项目。这一切都很好,直到现在我们需要能够将我们的 GUI 转换为显示阿拉伯字符。 DBGrids 不使用 Unicode,所以我需要一种方法来显示数据库中的字符而不使用 Unicode。目前,我已将区域语言设置设置为阿拉伯语,当我这样做时,我可以强制网格显示阿拉伯字符,但我无法通过代码实现。我需要能够在运行时在英语和阿拉伯语之间切换。我可以从数据库中提取数据,然后使用以下代码将其转换为非 Unicode:

_bstr_t tmp(vHolder.bstrVal, FALSE);   //wrap the BSTR
CString Caption(static_cast<const char*>(tmp)); //convert it
RetCaption = Caption;

然后我可以将阿拉伯语发布到 AfxMessageBox 并正确显示,但我似乎无法让网格接受非 Unicode 字符并正确显示它们。

有什么想法吗?

最佳答案

CString Caption(static_cast<const char*>(tmp));  //convert it

那不会转换它。如果 tmp 包含英文文本,它会生成单个字符。如果它包含阿拉伯语文本,则来自 Jibber 土地的俗语。从 OLE Automation 和您正在使用的 DBGrid 使用的 UTF-16 转换为 8 位字符不能通过强制转换完成,它需要一个转换函数。像 WideCharToMultiByte 或 OLE2A。

只有当线程的代码页与字符串中使用的字符集匹配时,这种转换才会重现清晰的文本。其中,如果网格显示阿拉伯语并且您的线程或您转换为英语的代码页只会产生一堆问号。

如果您不想在您的代码中启用 Unicode,那么您将无法即时在字符集之间切换。您运行此代码的操作系统在过去 17 年中一直支持它。

关于c++ - 如何在非 unicode C++ 环境中获取和传递阿拉伯字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3161299/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com