如何使用标准c ++从UTF-8转换为ANSI

Jos*_*uez 5 c++ stl std crt

我从数据库中读取了一些字符串,以char*和UTF-8格式存储(你知道,"á"编码为0xC3 0xA1).但是,为了将它们写入文件,我首先需要将它们转换为ANSI(不能使文件采用UTF-8格式......它只能读作ANSI),所以我的"á"不会成为一个".是的,我知道有些数据会丢失(中文字符,一般不在ANSI代码页中),但这正是我需要的.

但问题是,我需要在各种平台上编译代码,因此它必须是标准的C++(即没有Winapi,只有stdlib,stl,crt或任何具有可用源的自定义库).

有人有什么建议吗?

Jos*_*uez 10

几天前,有人回答说,如果我有一个C++ 11编译器,我可以试试这个:

#include <string>
#include <codecvt>
#include <locale>

string utf8_to_string(const char *utf8str, const locale& loc)
{
    // UTF-8 to wstring
    wstring_convert<codecvt_utf8<wchar_t>> wconv;
    wstring wstr = wconv.from_bytes(utf8str);
    // wstring to string
    vector<char> buf(wstr.size());
    use_facet<ctype<wchar_t>>(loc).narrow(wstr.data(), wstr.data() + wstr.size(), '?', buf.data());
    return string(buf.data(), buf.size());
}

int main(int argc, char* argv[])
{
    string ansi;
    char utf8txt[] = {0xc3, 0xa1, 0};

    // I guess you want to use Windows-1252 encoding...
    ansi = utf8_to_string(utf8txt, locale(".1252"));
    // Now do something with the string
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不知道响应发生了什么,显然是有人删除了它.但是,事实证明它是完美的解决方案.对于谁发布,非常感谢,你应该得到AC和upvote !!