CString类型中文字符串截取出现乱码的问题

ShuRay 2012-02-03 11:51:30
我用Left,Right, Mid函数截取一个既有中文也有英文字符的字符串,出现乱码。上网查找原因,有说将程序改为UNICODE的,不知道是什么意思啊,要怎么改呢?
求指教,谢谢!
...全文
845 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ShuRay 2012-02-03
  • 打赏
  • 举报
回复
感谢大家对我的一些小白问题的耐心解答!!现在问题已经解决啦啦啦~~~~总结一下:
使用WideCharToMultiByte函数将我的csRecv转换为UNICODE字符,
转换后的结果用wchar_t类型的变量(wText)接收,
再定义一个CStringW类型的变量:CStringW cswText(wText);
这样就可以使用CStringW::Left/Right/Mid函数截取出没有乱码的中文字符串啦!

再次感谢大家!!
要结贴啦~~
------------------------------结贴----------------------------------
SKy_kid 2012-02-03
  • 打赏
  • 举报
回复
CStringW::Left
ShuRay 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hotpos 的回复:]

CStringW
或者你遍历一下自己拆也可以,没必要必须用API
[/Quote]
这样就是说中文字符串时,CString::Left 这些截取函数实际上是不能用的咯
hotpos 2012-02-03
  • 打赏
  • 举报
回复
CStringW
或者你遍历一下自己拆也可以,没必要必须用API
ShuRay 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hdg3707 的回复:]

WideCharToMultiByte
MultiByteToWideChar
用这两个函数
[/Quote]
可是我用这个函数把字符串转换为UNICODE编码之后返回给一个wchar_t类型的变量,然后接下来我想要截取字符串时,用Left函数,就需要把wchar_t再转为CString,用另一函数转不是又回到单字节字符了?这个要怎么办呢?
xiaoguailong3 2012-02-03
  • 打赏
  • 举报
回复
可以设置字符集为宽字节,也可以字节转换
hdg3707 2012-02-03
  • 打赏
  • 举报
回复
WideCharToMultiByte
MultiByteToWideChar
用这两个函数
ShuRay 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jennyvenus 的回复:]
改成等宽字符,这样就不会出现半字节问题了。
[/Quote]

是用CStringW类型就变成等宽的了?
用户 昵称 2012-02-03
  • 打赏
  • 举报
回复
改成等宽字符,这样就不会出现半字节问题了。
Allen_zhang 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 shuray 的回复:]
改为UNICODE 的具体操作是?是改代码还是进行设置呢??
比如说代码:
CString csRecv, csLeft, csRgt;
csLeft = csRecv.Left(1024);
csRgt = csRecv.Right(1024);
[/Quote]

如果你的工程很大,原来没有注意过编码的话,直接在设置该会很麻烦的,可能会导致很多问题
可以定义一个CStringW类型的,用编码相关的函数做转换,截取之后再转换回来
具体的函数名很长,很久没写代码了,忘记怎样拼了,自己查一下msdn就知道了
ShuRay 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sharptiger123 的回复:]
汉字占两个字节 如果CString为单字节时只选中一半(left(1))另一半显示一定是乱码,如果改为UNICODE ,CString也定义成UNICODE , left(1)取到的最左边的第一个汉字或英文字母,英文字母是单字节的 UNICODE 自动将其填充为 0x00 自动变成两个字节与汉语保持一致。。。
[/Quote]

改为UNICODE 的具体操作是?是改代码还是进行设置呢??
比如说代码:
CString csRecv, csLeft, csRgt;
csLeft = csRecv.Left(1024);
csRgt = csRecv.Right(1024);
小白一个。。。谢谢啦
Allen_zhang 2012-02-03
  • 打赏
  • 举报
回复
中文和英文、数字字节的问题,这样截肯定有问题的,有可能在一个中文汉字中间截断,就会出现乱码。
要么是判断是不是中文,要么是将这段话用unicode编码方式存下来再来截就没问题了
sharptiger123 2012-02-03
  • 打赏
  • 举报
回复
汉字占两个字节 如果CString为单字节时只选中一半(left(1))另一半显示一定是乱码,如果改为UNICODE ,CString也定义成UNICODE , left(1)取到的最左边的第一个汉字或英文字母,英文字母是单字节的 UNICODE 自动将其填充为 0x00 自动变成两个字节与汉语保持一致。。。

16,472

社区成员

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

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

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