转换unicode字符串,反之亦然

时间:2011-01-24 19:38:38

标签: c++ unicode

我对使用 Unicode 字符串和指针有点新意,我不知道如何将转换为unicode转换为ascii,反之亦然。以下是我正在尝试做的事情,

const wchar_t *p = L"This is a string";

如果我想将其转换为char*,转换如何将wchar_t*转换为char*,反之亦然?

或使用wstringstring类对象的值,反之亦然

std::wstring wstr = L"This is a string";

如果我是正确的,您可以将字符串复制到新缓冲区而不进行转换吗?

6 个答案:

答案 0 :(得分:22)

在未来(VS 2010已经支持它),这将在标准C ++中实现(最终!):

#include <string>
#include <locale>

std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
const std::wstring wide_string = L"This is a string";
const std::string utf8_string = converter.to_bytes(wide_string);

答案 1 :(得分:3)

C ++本身并不提供此功能。您需要一个单独的库,例如libiconv

答案 2 :(得分:3)

解决方案依赖于平台。在Windows上使用MultiByteToWideCharWideCharToMultiByte API函数。在Unix / Linux平台上iconv库很受欢迎。

答案 3 :(得分:3)

C标准库函数:mbstowcswcstombs

答案 4 :(得分:3)

从ASCII到Unicode的转换反之亦然。按照设计,前128个Unicode值与ASCII相同(事实上,前256个等于ISO-8859-1)。

因此,以下代码适用于char为ASCII且wchar_t为Unicode的系统:

const char* ASCII = "Hello, world";
std::wstring Unicode(ASCII, ASCII+strlen(ASCII));

你不能这么简单地逆转它:汉语确实存在于Unicode但不存在于ASCII中,那么你将如何“转换”它呢?

答案 5 :(得分:0)

widen()算法将char转换为wchar_t

char a;
a = 'a';
whcar_t wa = cin.widen(a);

当然,你必须将它放入循环中。并解决*; 相反的是narrow()