首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Linux中是否有将wstring或wchar_t*转换为UTF-8的内置函数?

在Linux中是否有将wstring或wchar_t*转换为UTF-8的内置函数?
EN

Stack Overflow用户
提问于 2011-09-19 10:10:57
回答 4查看 17.1K关注 0票数 9

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

是否有内置函数将Linux中的wstringwchar_t*转换为UTF-8,并使用简单的调用。

示例:

代码语言:javascript
运行
复制
wstring str = L"file_name.txt";
wstring mode = "a";
fopen([FUNCTION](str), [FUNCTION](mode)); // Simple invoke.
cout << [FUNCTION](str); // Simple invoke.
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-19 10:29:53

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

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

C++11以std::string s = u8"Hello World: \U0010FFFF";的形式添加了新的UTF8文本。它们已经在UTF8中了,但它们不能与不透明的wstring接口,只能通过我描述的方式。

See this question需要更多的背景信息。

票数 8
EN

Stack Overflow用户

发布于 2011-09-26 22:14:40

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

代码语言:javascript
运行
复制
#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进行测试。

票数 15
EN

Stack Overflow用户

发布于 2011-09-19 10:24:31

如果您真正想要的是从宽字符转换到当前的区域设置,那么wcstombs就可以做您需要的事情了。

如果不是的话,你可能需要去看ICU,boost或类似的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7469296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档