【问题标题】:Convert a unicode string to a string将 unicode 字符串转换为字符串
【发布时间】:2012-09-24 03:54:22
【问题描述】:

我在 C++ Builder 中创建了一些 C++ 类。我现在在 VCL 表单应用程序中使用这些。我有一个加载文本文件并将字符串作为参数的函数。

我正在使用 openDialog 控件浏览文件然后打开它。

我的问题是:openFialog 的 .filename 属性是 UnicodeString 的形式,我的函数需要一个 std::string。如何将 unicode 字符串转换为 std::string?

这是我的代码:

OpenDialog1->Execute();
calCalendar.loadAppointmentsFromFile(OpenDialog1->FileName.t_str());

这里是函数定义:

void loadAppointmentsFromFile(const std::string& stringFilename);

我收到以下错误:

[BCC32 错误] Assessment2.cpp(39): E2342 参数“stringFilename”中的类型不匹配(需要“const std::string &”,得到“wchar_t *”)

我可以帮忙解决这个问题吗?

【问题讨论】:

标签: c++ string class unicode typeconverter


【解决方案1】:

使用UnicodeString::t_str 来获得一个缩小的字符串。但是,您应该考虑不要将两者混用。

另一种选择是先转换为AnsiString

AnsiString str = OpenDialog1->FileName;
std::string s(str.c_str());
loadAppointmentsFromFile(s);

或者

std::string s = OpenDialog1->FileName.t_str(); // TCHAR mapping set to char
loadAppointmentsFromFile(s);

【讨论】:

  • 感谢您的回答。但是,我的代码仍然存在问题。我已添加到我的原始帖子中。你能看看吗。谢谢。
  • @user1690531:我的链接有你问题的答案,TCHAR_mapping 选项设置为wchar_t,转到Project->Options->Directories and Conditionals 并将其更改为char
  • 我已将其更改为 char。但是我仍然遇到同样的错误。
  • @user1690531:好的,那么试试我的第二种方法(虽然你真的应该只使用宽字符串)。
  • 不要使用UnicodeString::t_str()!!!这是危险的,因为它会改变 UnicodeString 的内部数据,这可能会产生副作用。另外,t_str() 无论如何都在更高版本的 C++Builder 中被删除了。此问题的正确解决方案是将UnicodeString 分配给AnsiString,然后使用AnsiString::c_str()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 2011-06-09
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多