急急急!!!关于unicode编码问题

wintershu 2009-07-15 04:02:33
硬盘里目录项的数据是通过unicode编码的,
假如一个“Math”文件
它在硬盘中的数据是:“4D 00 61 00 74 00 68 00”,
我要如何读取这些数据,并保存在字符串中?
有中文的也一样,如何保存?

我好晕,拜托了
...全文
60 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
DavidHsing 2009-07-16
  • 打赏
  • 举报
回复

谈谈 Unicode 编码,简要解释 UCS、UTF、BMP、BOM 等名词
http://blog.csdn.net/DavidHsing/archive/2007/09/04/1771258.aspx

字符,字节和编码
http://blog.csdn.net/DavidHsing/archive/2008/09/05/2885043.aspx

ANSI、UNICODE、UTF-8 文件编码转换
http://blog.csdn.net/DavidHsing/archive/2008/11/17/3317841.aspx
wintershu 2009-07-16
  • 打赏
  • 举报
回复
不好意思啊,之前对这类知识太懵懂了
现在经过一些实验分析
终于有了大致的了解,知道是怎么一回事了
多谢各位,不多说了,给分
jyh_baoding 2009-07-16
  • 打赏
  • 举报
回复
按保存的类型读取应不会发生意外
qq14923349 2009-07-16
  • 打赏
  • 举报
回复
要转

上面的给出了
zhangyan_wt 2009-07-16
  • 打赏
  • 举报
回复
楼上都说好几遍了,先把数据放到WChar类型数组里,再WideCharToMultiByte。
大致就是这样:
假如你的数据是BYTE * pBuffer,长度nBufferSize,
最后的数据是szFile


WCHAR pWBuffer = new WCHAR[nBufferSize/2+1];
memcpy( pWBuffer, pBuffer, nBufferSize );
pWBuffer[nBufferSize/2] = 0;
int nLen = WideCharToMultiByte(GetACP(),0,pWBuffer,nBufferSize/2,NULL,0,"",NULL);
char *szFile = new char[nLen+1];
szFile[nLen] = 0;
WideCharToMultiByte(GetACP(),0,pWBuffer,nBufferSize/2,szFile,nLen,"",NULL);

...

delete []pWBuffer;
delete []szFile;
wintershu 2009-07-16
  • 打赏
  • 举报
回复
不对,我那样做如果是英文还是正确的
但遇到中文时,则成了乱码

我到底应该怎么做?怎么把读取unicode,然后转储在BYTE里?
wintershu 2009-07-15
  • 打赏
  • 举报
回复
那如果我只是简单的把字母前面的零去掉
就是先判断它是不是零,如果是零,我不存取
如果是中文,那它两个字节都是不为零的,所以正常存储
这样保存在另外一个BYTE缓冲区里
当显示时,会不会正常显示?》
尤其是中文的时候
zhangyan_wt 2009-07-15
  • 打赏
  • 举报
回复
强制转换就行
WCHAR *pBufferWChar = (WCHAR *)Buffer;
wintershu 2009-07-15
  • 打赏
  • 举报
回复
如果不用API呢,
数据已经在我BYTE* Buffer缓冲区里
我要怎么转换过来
oyljerry 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wintershu 的回复:]
怎么读到wchar里呢?
怎么用swprintf,这个我不太懂
[/Quote]
WCHAR ch[256];
ReadFile() 读取
wintershu 2009-07-15
  • 打赏
  • 举报
回复
怎么读到wchar里呢?
怎么用swprintf,这个我不太懂
用户 昵称 2009-07-15
  • 打赏
  • 举报
回复
前面俺说错了,你这个文件本身就是unicode格式,直接读到wchar数组里面就可以了。
wintershu 2009-07-15
  • 打赏
  • 举报
回复
用什么读到WCHAR里?
swprintf?
zhangyan_wt 2009-07-15
  • 打赏
  • 举报
回复
先直接读到WCHAR[10]里,如果需要变成char*的字符串,就需要用WideCharToMultiByte转一道。
wintershu 2009-07-15
  • 打赏
  • 举报
回复
我是直接从硬盘数据读取的数据
假设我将它存储在BYTE Temp[20]里,它会显示为0M0a0t0h
我应该怎么办
spring203 2009-07-15
  • 打赏
  • 举报
回复
用WideCharToMultiByte这个可以转化得到 char*(ascii)了!这样就好办了!
PS:还要根据楼主实际情况, 楼主能不能告诉我你用的哪个函数取目录文件名的呀,我记得windows API可以直接取出TCHAR出来的呀,这样就可以一步到位了!
wintershu 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 spring203 的回复:]
读出的时候记得用 BYTE buf[]里面, 如果直接用字符串第二个就是'\0',会丢到的, 现在想知道的是楼主想把这些读出的保存到哪,干什么用!
[/Quote]
我想遍历硬盘里的目录项,把文件名都存储到一个结构体里
oyljerry 2009-07-15
  • 打赏
  • 举报
回复
直接用WCHAR数组等来保存读取的内容
用户 昵称 2009-07-15
  • 打赏
  • 举报
回复
按binary读出来,然后multibytetowidechar就可以了。
hhwei1985 2009-07-15
  • 打赏
  • 举报
回复
帮顶
加载更多回复(1)

16,551

社区成员

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

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

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