UTF-8 转 GB2312

minmin283517 2009-10-13 01:55:25
各位高手,谁有UTF-8转gb2312 的示例代码,我从网上找了一些资料,然后用OUTLOOK 发送邮件,自己这边的服务器接受,然后解析,发现还是不行 .谁有代码能分享一下吗.高份相送
...全文
323 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zicheng_lin 2012-04-25
  • 打赏
  • 举报
回复
顶一个下,这个问题,最后返回的 &utf8[0],栈上的引用,会不会有问题啊
minmin283517 2009-10-15
  • 打赏
  • 举报
回复
我这边通过楼上说的,我的邮件服务器在接收邮件的时候,用Base64编码了一次,所以我这边必须用Base64解码一次,然后用楼上给的那几个函数,就搞定了.非常感谢大家的支持 !
minmin283517 2009-10-14
  • 打赏
  • 举报
回复
这种截取方式是我在用 Base64Decode 转换中文的时候,截取的时候可以实现,但是现在就不行了
jzp12 2009-10-14
  • 打赏
  • 举报
回复
GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312
老邓 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 minmin283517 的回复:]
经过测试不行, 我用OUTLOOK按照UTF-8编码的格式发送,然后我按照上面写的方法解析转换不了  .
比如我发送  "国家" 俩个字   =?UTF-8?B?5Zu95a62?= ,然后我截取成5Zu95a62 .
                std::wstring m_utfToUn;
                const wchar_t *m_pText;
                std::string  m_ugtToUnd;

   num=t_SubjectInfo.GetLength()-2;
                        DebugMsg("zhangmin123 %d",num);
t_Subject=t_SubjectInfo.Mid(10,num-10);
pbData=(const char*)(LPCTSTR)t_Subject;  //获得截取的字段
        m_utfToUn = Utf8ToUnicode(pbData);
                        m_pText = m_utfToUn.c_str();
m_ugtToUnd = UnicodeToAnsi(m_pText);
                        m_pDest = m_ugtToUnd.c_str();


但是我这样写,按照上面的写,还是原样输出了  5Zu95a62
[/Quote]
你确定你截取的肯定对吗?
我对这种发送格式不了解。
你不要从编码转换上找问题,应该是你截取的字符串是否正确上找问题。
  • 打赏
  • 举报
回复
不妨把第一个参数换成CP_ANSI试试:)
minmin283517 2009-10-14
  • 打赏
  • 举报
回复
经过测试不行, 我用OUTLOOK按照UTF-8编码的格式发送,然后我按照上面写的方法解析转换不了  .
比如我发送  "国家" 俩个字   =?UTF-8?B?5Zu95a62?= ,然后我截取成5Zu95a62 .
std::wstring m_utfToUn;
const wchar_t *m_pText;
std::string m_ugtToUnd;

   num=t_SubjectInfo.GetLength()-2;
DebugMsg("zhangmin123 %d",num);
t_Subject=t_SubjectInfo.Mid(10,num-10);
pbData=(const char*)(LPCTSTR)t_Subject; //获得截取的字段
m_utfToUn = Utf8ToUnicode(pbData);
m_pText = m_utfToUn.c_str();
m_ugtToUnd = UnicodeToAnsi(m_pText);
m_pDest = m_ugtToUnd.c_str();



但是我这样写,按照上面的写,还是原样输出了 5Zu95a62
  • 打赏
  • 举报
回复
先Base64解码一次。解码后的格式为Utf-8

=?UTF-8?B?5Zu95a62?=中的?B?应该指的是base64
老邓 2009-10-13
  • 打赏
  • 举报
回复
qp::StringW 要改成 std::wstring
qp::StringA 要改成 std::string
老邓 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 minmin283517 的回复:]
经过测试不行, 我用OUTLOOK按照UTF-8编码的格式发送,然后我按照上面写的方法解析转换不了  .
比如我发送  "国家" 俩个字   我这边获得到是  5Zu95a62   
 
我不知道是那错了. 
[/Quote]
系统?
是先转换到Unicode,再转换成ANSI吗?
你可以本地测试一下,写一个UTF-8的文件,从里面读到char*的buf中,再转换成ANSI,看能否正常写入ANSI文件。

我给的代码是我的工程里用的,肯定没问题的。
minmin283517 2009-10-13
  • 打赏
  • 举报
回复
经过测试不行, 我用OUTLOOK按照UTF-8编码的格式发送,然后我按照上面写的方法解析转换不了  .
比如我发送  "国家" 俩个字   我这边获得到是  5Zu95a62   
 
我不知道是那错了. 
whg01 2009-10-13
  • 打赏
  • 举报
回复
1楼写的很全了,组合在一起就行了。
minmin283517 2009-10-13
  • 打赏
  • 举报
回复
VC6.0
qqwx_1986 2009-10-13
  • 打赏
  • 举报
回复
iconv
好像是linux下面的,不过可以移植到windows下
xingzhe2001 2009-10-13
  • 打赏
  • 举报
回复
对阿,用WideCharToMultiByte
老邓 2009-10-13
  • 打赏
  • 举报
回复
你要先把utf-8转化成Unicode,再从Unicode到ansi。
老邓 2009-10-13
  • 打赏
  • 举报
回复
其中,qp::String用std::string替换就可以了。
全了。
老邓 2009-10-13
  • 打赏
  • 举报
回复
qp::StringW Global::AnsiToUnicode(const char* buf)
{
int len = ::MultiByteToWideChar(CP_ACP, 0, buf, -1, NULL, 0);
if (len == 0) return L"";

std::vector<wchar_t> unicode(len);
::MultiByteToWideChar(CP_ACP, 0, buf, -1, &unicode[0], len);

return &unicode[0];
}

qp::StringA Global::UnicodeToAnsi(const wchar_t* buf)
{
int len = ::WideCharToMultiByte(CP_ACP, 0, buf, -1, NULL, 0, NULL, NULL);
if (len == 0) return "";

std::vector<char> utf8(len);
::WideCharToMultiByte(CP_ACP, 0, buf, -1, &utf8[0], len, NULL, NULL);

return &utf8[0];
}

qp::StringW Global::Utf8ToUnicode(const char* buf)
{
int len = ::MultiByteToWideChar(CP_UTF8, 0, buf, -1, NULL, 0);
if (len == 0) return L"";

std::vector<wchar_t> unicode(len);
::MultiByteToWideChar(CP_UTF8, 0, buf, -1, &unicode[0], len);

return &unicode[0];
}

qp::StringA Global::UnicodeToUtf8(const wchar_t* buf)
{
int len = ::WideCharToMultiByte(CP_UTF8, 0, buf, -1, NULL, 0, NULL, NULL);
if (len == 0) return "";

std::vector<char> utf8(len);
::WideCharToMultiByte(CP_UTF8, 0, buf, -1, &utf8[0], len, NULL, NULL);

return &utf8[0];
}

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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