首页 > 解决方案 > 我可以从 wxWidget wxTextCtrl 中读取 åäö 吗?

问题描述

在 C++ 中。我有一个 wxTexfield,希望用户输入一个单词的瑞典语翻译。

在用户输入 å、ä 或 ö (utf8) 之前,一切正常。将 wxString 转换为 utf8 不是问题 - 问题是我什至无法将文本从字段中取出。对于我使用的其余文本(其中 ans 是文本字段的指针)。任何想法?对于我刚刚使用的其他字符串,它可以正常工作。

 std::string ch = std::string((ans->GetValue()));

标签: c++wxwidgets

解决方案


std::string您不能在不指定编码的情况下将任意 Unicode 字符串转换为。默认情况下,编码是当前语言环境的编码,尤其是在 Windows 下,不一定是 UTF-8,这正是您几乎肯定想要使用的,因为在此编码中不可表示的字符将在转换过程中丢失。

因此,正确的做法是显式使用ans->GetValue().ToUTF8(),然后您std::string将包含字符的 UTF-8 编码表示。当然,您需要意识到字符串的长度不会为 1,即使对于单个字符也是如此,因此您可能需要std::wstring改用它。

PS 在 wxWidgets 3.1.5+ 中你也可以utf8_string()直接返回std::string,所以如果你有足够新的版本,你也可以使用这个。


推荐阅读