我对使用 Unicode 字符串和指针有点新意,我不知道如何将转换为unicode转换为ascii,反之亦然。以下是我正在尝试做的事情,
const wchar_t *p = L"This is a string";
如果我想将其转换为char*
,转换如何将wchar_t*
转换为char*
,反之亦然?
或使用wstring
到string
类对象的值,反之亦然
std::wstring wstr = L"This is a string";
如果我是正确的,您可以将字符串复制到新缓冲区而不进行转换吗?
答案 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上使用MultiByteToWideChar和WideCharToMultiByte API函数。在Unix / Linux平台上iconv库很受欢迎。
答案 3 :(得分:3)
C标准库函数:mbstowcs
和wcstombs
答案 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()