BSTR 到 CString 的阿拉伯语文本转换
BSTR to CString conversion for Arabic text
My VC++ (VS2008( 项目使用多字节字符集。
我有以下代码将日期字符串转换为 COLEDATETIME
_bstr_t bstr_tDate = bstrDate; //bstrDate is populated by a COM function
const CString szStartDateTime = bstr_tDate.operator const char *();
bool bParseOK = oleDateTime.ParseDateTime(szStartDateTime);
此代码在所有区域设置中都运行良好,但在阿拉伯语区域设置中失败,其中输入日期为以下格式:21/05/2012 11:50:31م
转换后,CString 包含垃圾字符,解析失败: 2012-01-05 11:50:28
是否有适用于阿拉伯语设置的 BSTR 到 CString 转换?
BSTR 是由 UTF-16 编码的 Unicode 代码点(宽"字符",16 位(组成的字符串:
typedef WCHAR OLECHAR;
typedef OLECHAR* BSTR;
这意味着像"م"这样的特殊字符由单个WCHAR
表示。在多字节字符串(C 样式char*
或 std::string
(中,这些特殊字符由更多字符表示(因此称为"多字节"(。
您的CString
包含垃圾字符的原因是因为您直接从_bstr_t
检索char*
。您需要先将此宽字符字符串转换为多字节字符串。还有更多方法可以做到这一点,其中之一是使用WideCharToMultiByte函数。
这个问题也将帮助您:如何正确使用WideCharToMultiByte
尽管有 MBCS 设置,但您可以使用 CString 尝试执行的操作,但它仅支持阿拉伯语。
开始支持所有 Unicode 可能要容易得多。如果您按照 utf8everywhere.org 的 Windows 部分中的说明进行操作,则可以在不对现有代码造成太大损害的情况下完成此操作(您可以保留 std::string 和 char*(。
相关文章:
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何在C++中将十六进制字符串转换为文本数据
- 如何将 qml 的文本转换为 float 和 int
- 是否可以创建一个用户定义的文本,将字符串文本转换为 own 类型的数组?
- 标准是否阻止在可变参数模板中使用足够小的文本值缩小文本转换范围
- 将文本转换为左值
- 将Space分离的值文本转换为使用C 的.CSV,然后保存
- 为什么我不能在窗口上使用 boost::locale::conv::between 将 UTF-16 文本转换为其他编码
- Direct2D:将文本转换为路径
- 关于在C++中通过ASCII将文本转换为十六进制
- 函数模板,用于将字符串文本转换为 std::array
- 将文本转换为HPGL(绘图仪)矢量坐标
- 将文本转换为网格
- .doc到纯文本转换器
- 将IDC_Edit文本转换为十六进制的WORD
- 如何将std::string中包含utf-16编码的文本转换为utf-16 wstring
- 如何在c++中将格式化的文本转换为XML
- SQLite文本转换为整数或REAL在c++做太多
- 从文本转换后的二进制文件应该是什么样子
- C++编译时将字符串文本转换为多字符文本