我想将wstring转换为UTF-8编码,但我想使用Linux的内置函数。
是否有内置函数将Linux中的wstring或wchar_t*转换为UTF-8,并使用简单的调用。
示例:
wstring str = L"file_name.txt";
wstring mode = "a";
fopen([FUNCTION](str), [FUNCTION](mode)); // Simple invoke.
cout << [FUNCTION](str); // Simple invoke.发布于 2011-09-19 10:29:53
C++语言标准没有显式编码的概念。它只包含“系统编码”的不透明概念,wchar_t是“足够大”的类型。
若要从不透明系统编码转换为显式外部编码,必须使用外部库。选择的库是iconv() (从WCHAR_T到UTF-8),它是Posix的一部分,可以在许多平台上使用,尽管在Windows上WideCharToMultibyte函数可以生成UTF8。
C++11以std::string s = u8"Hello World: \U0010FFFF";的形式添加了新的UTF8文本。它们已经在UTF8中了,但它们不能与不透明的wstring接口,只能通过我描述的方式。
See this question需要更多的背景信息。
发布于 2011-09-26 22:14:40
如果/当编译器支持足够多的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 2010进行测试。
发布于 2011-09-19 10:24:31
如果您真正想要的是从宽字符转换到当前的区域设置,那么wcstombs就可以做您需要的事情了。
如果不是的话,你可能需要去看ICU,boost或类似的。
https://stackoverflow.com/questions/7469296
复制相似问题