有一字符串,我想截其中一段,可是会出现乱码,请问怎么解决 如果编码标准为ANSI,则0x00-0x7f都是单字节字符,如果包含汉字,则每个汉字都为双字节编码:高字节和低字节,高字节>=0xa1,低字节>=0xa1,你可以据此判断你是否截断了汉字。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 包含汉字否?如果包含,可以参考如下代码,应该有帮助的://一个包含汉字和字母的字符串,如何逐个输出??用如下代码实现: char *hz="我是xy你是?"; CString str(hz); CString s1; int length=strlen(str); for(int i=0;i<length;i++) { if(((unsigned char*) hz)[i]>0xa0) //如果是汉字 { s1=str.Left(2); str=str.Mid(2); i+=1; AfxMessageBox(s1); } else //非汉字 { s1=str.Left(1); str=str.Mid(1); AfxMessageBox(s1); } } api函数int MultiByteToWideChar(UINT uCodePage,DWORD dwFlags,PCSTR pMultiByteStr,int cchMultiByte,PWSTR pWideCharStr,int cchWideChar)可以把ansi字符串转换为Unicode字符串,使用步骤:1、调用MultiByteToWideChar,pWideCharStr=NULL,cchWideChar=0,此时部转换字符串,返回的是将来转换后的字符串长度2、用该长度在此调用该函数,不过先用该长度分配足够的内存。转换后再截取。方法2:出现乱码的原因可能是:截取的开始位置不对,因为单字节和双字节字符混合不能简单的从某一位置开始,可以从想截取的位置的前一字节开始if(s[i]>=128)j=i-1;else j=i; 我的代码如下,请帮我修改修改,谢谢while(str2.GetLength()>0){ str1=str2.Left(CUTLENGTH); str2=str2.Right(str2.GetLength()-CUTLENGTH); m_MessageList.InsertString(-1,str1);//产生乱码} Nextchar()/CharNext记不清了,你查查看。 求助:WM_消息的 在多文档中如何使子窗口的大小随主窗口的大小改变而改变? 这个问题我准备了999个帐号给分999*200分.... 看到Java中的数据库连接池, 大家有没有C++下的连接池可供我参考! 高人请进来谈谈嵌入程序中的ACTIVEX控件的升级问题 进程、线程和堆栈的管理??? 新手请教:如何实现对话框与程序的交互? 在vc中如何实现ASCII码与16进制数之间的转换??? 使用API对串口编程,发送文件遇到难题 如何修改CFormView的窗体中的对话框的颜色? 谁做过排料的程序 mfc中如何在不同对象之间传递消息?
//一个包含汉字和字母的字符串,如何逐个输出??
用如下代码实现:
char *hz="我是xy你是?";
CString str(hz);
CString s1;
int length=strlen(str);
for(int i=0;i<length;i++)
{
if(((unsigned char*) hz)[i]>0xa0) //如果是汉字
{
s1=str.Left(2);
str=str.Mid(2);
i+=1;
AfxMessageBox(s1);
}
else //非汉字
{
s1=str.Left(1);
str=str.Mid(1);
AfxMessageBox(s1);
}
}
UINT uCodePage,
DWORD dwFlags,
PCSTR pMultiByteStr,
int cchMultiByte,
PWSTR pWideCharStr,
int cchWideChar)
可以把ansi字符串转换为Unicode字符串,使用步骤:
1、调用MultiByteToWideChar,pWideCharStr=NULL,cchWideChar=0,此时部转换字符串,返回的是将来转换后的字符串长度
2、用该长度在此调用该函数,不过先用该长度分配足够的内存。
转换后再截取。
方法2:
出现乱码的原因可能是:截取的开始位置不对,因为单字节和双字节字符混合不能简单的从某一位置开始,
可以从想截取的位置的前一字节开始
if(s[i]>=128)j=i-1;
else j=i;
while(str2.GetLength()>0)
{
str1=str2.Left(CUTLENGTH);
str2=str2.Right(str2.GetLength()-CUTLENGTH);
m_MessageList.InsertString(-1,str1);//产生乱码
}