有什么内置函数在Linux中将wstring或wchar_t *转换为UTF-8?

我想将wstring转换为UTF-8编码,但我想使用Linux的内置函数。

有没有什么内置的函数在Linux 中简单的调用wstringwchar_t*转换为UTF-8?

例:

 wstring str = L"file_name.txt"; wstring mode = "a"; fopen([FUNCTION](str), [FUNCTION](mode)); // Simple invoke. cout << [FUNCTION](str); // Simple invoke. 

C ++语言标准没有显式编码的概念。 它只包含一个“系统编码”的不透明概念, wchar_t是一个“足够大”的类型。

要从不透明的系统编码转换为明确的外部编码,您必须使用外部库。 选择的库可以是iconv() (从WCHAR_TUTF-8 ),它是Posix的一部分,可以在许多平台上使用,但在Windows上, WideCharToMultibyte函数保证产生UTF8。

C ++ 11以std::string s = u8"Hello World: \U0010FFFF";的形式添加新的UTF8 字面值 std::string s = u8"Hello World: \U0010FFFF"; 。 那些已经在UTF8,但他们不能通过我所描述的方式与不透明的wstring接口。

看到这个问题多一点背景。

如果/当你的编译器支持足够的C ++ 11,你可以使用wstring_convert

 #include <iostream> #include <codecvt> #include <locale> int main() { std::wstring_convert<std::codecvt_utf8<wchar_t>> utf8_conv; std::wstring str = L"file_name.txt"; std::cout << utf8_conv.to_bytes(str) << '\n'; } 

在Linux上使用clang ++ 2.9 / libc ++进行测试,在Windows上使用Visual Studio 2010进行测试。

如果你真正想要做的是从宽字符转换到当前语言环境,那么wcstombs会做你所需要的。

如果没有,那么你可能需要看重症监护病房,提升或类似的。

当然,在Linux上没有内置的函数,因为名字Linux只引用了内核,而没有任何内容。 我严重怀疑gcc自带的libc有这样的功能,而且

 $ man -k utf 

支持这个理论。 但是周围有很多好的UTF-8库。 我个人推荐iconv库进行这样的转换。