下面的代码对于英文没有问题,但是中文就出问题。如:m_addname是d:\myfile,
TRACE("s = %ws\n",s)就显示是d:\myfile;如果m_addname是d:\文件,
TRACE("s = %ws\n",s)就显示是d:\,后面的中文全都不见了,我觉得是什么字符给截断了,问怎么解决。
CHAR file[260];
strcpy(file,m_addname.GetBuffer(m_addname.GetLength()));//m_addname是一个CString类型
m_addname.ReleaseBuffer(0);
int widecharlen=MultiByteToWideChar( //计算从Ansi转换到Unicode后需要的字节数
CP_ACP,
MB_COMPOSITE,
file, //要转换的Ansi字符串
-1, //自动计算长度
0,
0
);
wchar_t* s = new wchar_t[widecharlen];
MultiByteToWideChar( //从Ansi转换到Unicode字符
CP_ACP,
MB_COMPOSITE,
file,
-1,
s, //转换到tmpstr
widecharlen //最多转换widecharlen个Unicode字符
); TRACE("s = %ws\n",s);
TRACE("s = %ws\n",s)就显示是d:\myfile;如果m_addname是d:\文件,
TRACE("s = %ws\n",s)就显示是d:\,后面的中文全都不见了,我觉得是什么字符给截断了,问怎么解决。
CHAR file[260];
strcpy(file,m_addname.GetBuffer(m_addname.GetLength()));//m_addname是一个CString类型
m_addname.ReleaseBuffer(0);
int widecharlen=MultiByteToWideChar( //计算从Ansi转换到Unicode后需要的字节数
CP_ACP,
MB_COMPOSITE,
file, //要转换的Ansi字符串
-1, //自动计算长度
0,
0
);
wchar_t* s = new wchar_t[widecharlen];
MultiByteToWideChar( //从Ansi转换到Unicode字符
CP_ACP,
MB_COMPOSITE,
file,
-1,
s, //转换到tmpstr
widecharlen //最多转换widecharlen个Unicode字符
); TRACE("s = %ws\n",s);
解决方案 »
- 请wwwllg进来接分,谢谢帮助!
- 登录服务器失败。。。。求解?
- 将Clistctrl的 header 删除重建之后,list 的下部无故出现滚动条,并且不能接受鼠标点击事件
- 高手帮我解释一下下面这几句什么意思 详细一些 说清楚地立即给分 谢谢
- 关于ActiveX内存释放的问题
- 一个CString的问题
- 最近总是静不下心来,浮浮躁躁,有什么好办法吗?
- 如何编程将execl文件转换成为access数据库
- 问一下,RecordsetPtr::GetRows的第3个参数怎么填,有人用过吗 ???
- C++怎么设置界面类构造函数执行后不弹出界面?
- 怎样在vc的dll里得到主程序(CEditView的SDI)的视图的指针呢?
- VC工具使用问题 Resource View -〉Resource Includes... Compile-time directives使用来干嘛的?
typedef struct _INFILE
{
ULONG size;
PWSTR PFileName;
}File;FileInfo f;
f.PFileName = s;
把PFileName指向s,然后传送下去。
英文可以正常显示,中文就不行,我一定要PFileName指向带中文的unicode字符串的,可就是不对阿
记得是codecomments上有人发文说过TRACE把%s和%S给弄错了的
英文如下: d:\sss
64 00 3A 00 5C 00 73 d.:.\.s
00 73 00 73 00 00 FF .s.s...
中文如下: d:\文件
64 00 3A 00 5C 00 87 d.:.\..
65 F6 4E 00 00 FF FF eXX..其中XX是一个乱码。看到从87那里截断了,烦躁阿
64 00 3A 00 5C 00 73 d.:.\.s
00 73 00 73 00 00 FF .s.s...
这就是ASCII在UNICODE下的双字节编码!系统默认会显示统一的unicode编码,除了这个,系统主要是用了默认的字符及编码,
比如简体中文版的XP,会用CP936编码,来处理ascii和多字节的编码,而且当字符的
编码是多字节的时候,你就不能用字节的取值来得到字符串,要用得到字符的函数,这个
windows API中有!所以中文如下: d:\文件
64 00 3A 00 5C 00 87 d.:.\..
65 F6 4E 00 00 FF FF eXX..中 65 F6 4E 00 00 中都是"文件"的多字节编码,就不能用逐个字节取值得到字符串,
而需要将这放在一个数组中,用 MultiByteToWideChar 设置相应的字符集,将其字节串值
转换为这种字符集下的字符。