首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mbsnrtowcs实现多字节到Widechar的转换

使用mbsnrtowcs实现多字节到Widechar的转换
EN

Stack Overflow用户
提问于 2012-11-07 08:17:34
回答 3查看 1.2K关注 0票数 0

我正在尝试将多字节(UTF)字符串转换为Widechar字符串,但mbsnrtowcs总是失败。以下是输入和预期字符串:

代码语言:javascript
复制
char* pInputMultiByteString = "A quick brown Fox jumps \xC2\xA9 over the lazy Dog.";
wchar_t* pExpectedWideString = L"A quick brown Fox jumps \x00A9 over the lazy Dog.";    

特殊字符是版权符号。

当我使用Windows例程时,这个转换工作得很好,但是由于MultiByteToWideChar在linux上不可用,我不得不使用mbsnrtowcs -这是失败的。我也尝试过使用其他字符,但总是失败。唯一的期望是,当我只使用基于ASCII的输入字符串时,mbsnrtowcs工作得很好。我做错了什么?

EN

回答 3

Stack Overflow用户

发布于 2012-11-10 20:40:23

UTF不是多字节字符串(尽管unicode字符将使用多个字节来表示,但这是事实)。多字节字符串是使用特定代码页来表示字符的字符串,其中一些字符将使用多个字节。

由于您组合了ANSI字符和UTF字符,因此应该使用UTF8。

因此,尝试使用mbsnrtowcs将UTF转换为wchar_t (在windows上是UTF16,在linux上是UTF32)是不可能的。

如果你使用UTF8,你应该在UNICODE处理库中寻找它。对于大多数任务,我推荐使用来自http://utfcpp.sourceforge.net/的UTF8-CPP

你可以在维基百科上阅读更多关于UNICODE和UTF8的内容。

票数 1
EN

Stack Overflow用户

发布于 2012-11-07 08:38:40

在MultiByteToWideChar上,您是否在您的语言环境中设置了LC_CTYPE以指定UTF-8?

票数 0
EN

Stack Overflow用户

发布于 2012-12-28 06:50:31

解决方案:默认情况下,每个C程序都使用"C“语言环境,因此我必须调用setlocale(LCTYPE,"").."”意味着它将使用我的环境的区域设置,即en_US.utf8,并且转换工作正常。

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

https://stackoverflow.com/questions/13261468

复制
相关文章

相似问题

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