c++ 我不知道这个utf8或16或语言环境的问题,所以这里是[关闭]

dl5txlt9  于 2023-02-17  发布在  其他
关注(0)|答案(1)|浏览(87)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

21小时前关门了。
Improve this question
我不知道是utf8问题还是16问题,或者是语言环境问题,所以就这样了
所以我从一个捷克人写的文件中抓取了一些文本,伊日科维采

std::eventName = content.substr(first, found - first);

然后我尝试使用chatGPT函数处理它,因为我想用捷克字符命名目录和文件

std::string CStartStopBasic::ConvertStringToUtf8(const std::string& input)
{
    // Convert std::string to const char*
    const char* inputStr = input.c_str();

    // Get required buffer size for MultiByteToWideChar()
    int wideCharSize = MultiByteToWideChar(CP_UTF8, 0, inputStr, -1, nullptr, 0);

    // Allocate wide-character string buffer
    wchar_t* wideCharBuffer = new wchar_t[wideCharSize];

    // Convert input string to wide-character string
    MultiByteToWideChar(CP_UTF8, 0, inputStr, -1, wideCharBuffer, wideCharSize);

    // Get required buffer size for WideCharToMultiByte()
    int utf8Size = WideCharToMultiByte(CP_UTF8, 0, wideCharBuffer, -1, nullptr, 0, nullptr, nullptr);

    // Allocate UTF-8 string buffer
    char* utf8Buffer = new char[utf8Size];

    // Convert wide-character string to UTF-8 string
    WideCharToMultiByte(CP_UTF8, 0, wideCharBuffer, -1, utf8Buffer, utf8Size, nullptr, nullptr);

    // Create std::string from UTF-8 string buffer
    std::string output(utf8Buffer);

    // Clean up buffers
    delete[] wideCharBuffer;
    delete[] utf8Buffer;

    return output;
}

我看到文本在wideCharBuffer中看起来是正确的,但是字符串输出与输入的相同。

cmd << "C:\\Dance\\" << fixedEventName;
    CreateDirectoryA(cmd.str().c_str(), NULL);
    cmd << "fixedEventName.txt";
    inputFileName = cmd.str();
    std::ofstream ofs(inputFileName, std::ofstream::trunc);
    ...usual ofstream stuff...
nmpmafwu

nmpmafwu1#

我做的;抓住我的绳子

std::string eventName = content.substr(first, found - first);

然后我这样做创建我的文件夹和文件与原始文本名称

std::wstring wEventName;
    const char* inputStr = eventName.c_str();
    int wideCharSize = MultiByteToWideChar(CP_UTF8, 0, inputStr, -1, nullptr, 0);
    wchar_t* wideCharBuffer = new wchar_t[wideCharSize];
    MultiByteToWideChar(CP_UTF8, 0, inputStr, -1, wideCharBuffer, wideCharSize);
    wEventName = wideCharBuffer;
    delete[] wideCharBuffer;

    std::wstringstream wcmd;
    wcmd << "C:\\Dance\\" << wEventName;
    CreateDirectoryW(wcmd.str().c_str(), NULL);
    wcmd << "\\" << wEventName << ".txt";

    std::wstring wInputFileName
    wInputFileName = wcmd.str();
    std::ofstream ofs(wInputFileName, std::ofstream::trunc);
    ...usual ofstream stuff...

我不知道这是好是坏,但它确实有效,并不难,但我只是在学习,字符串到wstring对初学者来说真的很复杂,我甚至不知道这是一个字符串到wstring的问题。

相关问题