.net 如何将包含非英语字符的字符串转换为std::String

.net 如何将包含非英语字符的字符串转换为std::String,.net,string,winforms,c++-cli,clr,.net,String,Winforms,C++ Cli,Clr,我正在编写一个winforms应用程序,有一次我需要从文本框中提取文本并将其转换为std::String。但是,文本框输入可以包含立陶宛字母。 对于转换,我使用以下代码: std::string stringConvert(System::String ^ x) { msclr::interop::marshal_context context; return context.marshal_as<std::string>(x);

我正在编写一个winforms应用程序,有一次我需要从文本框中提取文本并将其转换为std::String。但是,文本框输入可以包含立陶宛字母。 对于转换,我使用以下代码:

        std::string stringConvert(System::String ^ x) {
        msclr::interop::marshal_context context;
        return context.marshal_as<std::string>(x);
    }
std::string stringConvert(系统::字符串^x){
msclr::interop::封送上下文;
返回context.marshal_as(x);
}
但是,如果文本框中有一个类似“ibut”的单词,则结果是“ibut?”。我怎样才能解决这个问题

例如,我设置了一个带有一个文本框和一个按钮的表单。如果我这样写:

std::string a;

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
            a = stringConvert(textBox1->Text);
            setlocale(LC_ALL, "Lithuanian");
            std::cout << a << std::endl;
        }
std::字符串a;
私有:系统::无效按钮1\u单击(系统::对象^sender,系统::事件参数^e){
a=stringConvert(textBox1->Text);
setlocale(LC_ALL,“立陶宛语”);

STD::这不是C++。它是C++ + CLI。无论如何,代码> STD::String 只是一个序列,代码不符,代码不在编码。你如何确定结果是什么?可能是你打印的方式。A。添加一个例子。如果你需要更多的信息,请提问。@ LeNNESS ReSeReRoTBY你应该阅读我链接到的页面。是否应将
ąę
转换为?字符集中或中不存在这些字母。是否有任何原因导致您试图使用窄字符(
std::string
)而不是宽字符(
std::wstring
)?是否有任何理由使用这两个字符而不是功能强大的
String^
?Windows控制台对非1252字符的处理是出了名的糟糕。但是您可以将它们转换为UTF-8(只需使用
Encoding::UTF8->GetBytes()
并固定生成的数组以构建
std::String
)将它们写入文件或传递给任何需要调用的<代码> char < /C++ >函数。这不是C++。它是c++/CLI。无论如何,<>代码> STD::String < /C>只是一个序列,代码不符,代码不在编码。你如何确定结果是什么?可能是你打印的方式。A。添加了一个例子。如果你需要更多信息,请询问。@LightnessRaceSinorbity您应该阅读我链接到您的页面。
ąę
应该转换成什么?这些字母在字符集中或中不存在。您是否有任何理由试图使用窄字符(
std::string
)而不是宽字符(
std::wstring
)?是否有任何理由使用这两个字符而不是功能强大的
String^
?Windows控制台对非1252字符的处理是出了名的糟糕。但是您可以将它们转换为UTF-8(只需使用
Encoding::UTF8->GetBytes()
并固定生成的数组以构建
std::String
)并将它们写入一个文件或传递给需要调用的基于
char
的函数。