CString到UTF-8字节型

wmmj23 2010-03-03 10:45:17
请问怎么将CString转成UTF-8的字节型啊?
...全文
268 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzy694358 2010-03-04
  • 打赏
  • 举报
回复
引用 5 楼 zhou1xp 的回复:
你的工程现在是ANSI还是UNICODE,如果是UNICODE它本身就是UTF-8,如果是ANSI
那么
a.format(L"this test");
如果本身已经有值
MultiBytesToWideChar()函数转化,自己查下MSDN

UNICODE它本身就是UTF-8?
这是谁说的,不用转就可以?
Joephia 2010-03-04
  • 打赏
  • 举报
回复
CString A;
char * p=NULL;

int wLen = A.GetLength()+1;
int uLen = WideCharToMultiByte(CP_UTF8,0,(LPCTSTR)A,wLen,NULL,0,NULL,NULL);
p=new char[uLen];
WideCharToMultiByte(CP_UTF8,0,(LPCTSTR)A,wLen,p,uLen,NULL,NULL);
....
....
delete [] p;
wmmj23 2010-03-04
  • 打赏
  • 举报
回复
看不懂啊。。。

首先我用的是VS2008 默认是Unicode
我有个Edit1变量是CString
还有个p.text是char* 且需要是UTF-8的

能否写个程序转换一下
使p.text=Edit1
wmmj23 2010-03-03
  • 打赏
  • 举报
回复
我的是VS2008 UNICODE那是字节型吗?
zhou1xp 2010-03-03
  • 打赏
  • 举报
回复
你的工程现在是ANSI还是UNICODE,如果是UNICODE它本身就是UTF-8,如果是ANSI
那么
a.format(L"this test");
如果本身已经有值
MultiBytesToWideChar()函数转化,自己查下MSDN

oysoft 2010-03-03
  • 打赏
  • 举报
回复
看你在CString a 定义环境是什么了,ANSI还是Unicode。
1.如果在ANSI环境使用
MultiByteToWideChar(CP_UTF8,......)
2.如果在Unicode环境使用
WideCharToMultiByte(CP_UTF8,......)
wmmj23 2010-03-03
  • 打赏
  • 举报
回复
能不能具体点?CString a; 怎么转?
oyljerry 2010-03-03
  • 打赏
  • 举报
回复
MultiBytesToWideChar() API
zhou1xp 2010-03-03
  • 打赏
  • 举报
回复
format的时候加个L""
rendao0563 2010-03-03
  • 打赏
  • 举报
回复
你的CString是什么格式的?

ASSCII是2个字节表示一个汉字.
UNICODE是4个字节表示一个汉字.
UTF-8是1-3个字节表示一个汉字.是一种压缩格式.

下面是UNICODE转UTF-8



// Do not assert in this function since it is used by the asssertion code!
std::string SysWideToUTF8(const std::wstring& wide) {
return SysWideToMultiByte(wide, CP_UTF8);
}

// Do not assert in this function since it is used by the asssertion code!
std::string SysWideToMultiByte(const std::wstring& wide, uint32 code_page) {
int wide_length = static_cast<int>(wide.length());
if (wide_length == 0)
return std::string();

// Compute the length of the buffer we'll need.
int charcount = WideCharToMultiByte(code_page, 0, wide.data(), wide_length,
NULL, 0, NULL, NULL);
if (charcount == 0)
return std::string();

std::string mb;
mb.resize(charcount);
WideCharToMultiByte(code_page, 0, wide.data(), wide_length,
&mb[0], charcount, NULL, NULL);

return mb;
}

zhou1xp 2010-03-03
  • 打赏
  • 举报
回复
我晕,不需要转了,如果你没改过,那它默认的就是UNICODE方式的

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧